
C#の単体テストでテスト対象関数が、同クラス内の関数呼び出しをする場合に、呼び出し関数をテスト用のものに切り替えたいのですが、方法がよく分かりません。
テストはMSTESTで行います。
ご教授願いたく思います。
例)
class main{
private string data;
public main(){
data = "A";
}
public bool result(){
return get() == "AAA";
}
private string get(){
switch(data){
case "A": return "AAA";
case "B": return "BBB";
}
}
}
このresult関数の単体テストを戻り値true,falseの2ケース行いたいです。
それに際して、get関数を"AAA"固定と"BBB"固定で返すテスト用関数に切り替えて実行したいところなのですが、方法がよく分かりませんでした。
スタブだとインターフェースで切り替えるなどは見かけるのですが、同クラス内関数の切り替え方法の情報がつかめませんでした。
shim、fakesなども見かけたのですが、方法もよく分からず・・・。
申し訳ありませんが、ご教授ください。
※例の場合だと、TestMethodでメンバ変数dataを切り替えれば良いのですが、質問意図としては関数切り替えになりますので、そこについてはスルーでお願いします。
No.2ベストアンサー
- 回答日時:
その2つのテストで
>get関数を"AAA"固定と"BBB"固定で返すテスト用関数に切り替えて実行
をすればよいと思います。要するにgetのfakeですね。
get()をvirtualにして、
class TestableMain1 : main
{
...
string get() { return "AAA"; }
}
class TestableMain2 : main
{
...
string get() { return "BBB"; }
}
1番目のテストではmainの代わりにTestableMain1をinstantiateする。
2番目のテストではTestableMain2をinstantiateする。
あくまでresult()が正しいかどうかのテストですので、get()の動作は別途テストが必要ですね。
…でもスルーしてくれというからあえて書きませんでしたが、dataを切り替えるというか
dataを外から引数等で呼べるようにするのが
テストのしやすさ、保守性、リファクタリングのしやすさからみて
一番いいんですが。。。
ご回答ありがとうございました。
ご回答の内容通り、TestableMainクラスのgetにpublic override、mainクラスのgetにpublic virtualで解決しました。
No.1
- 回答日時:
切り替える関数ごとにテストを作るのではだめですか?
ユニットテスト(に限らずテストは)なるべくlogicを持たないほうがいいと思います。
回答ありがとうございます。
伝え方が悪く、申し訳ありません。切り替え関数ごとにテスト関数を作りたいと考えています。
例)
[TestMethod()]
public void resultTests1(){
main m = new main();
bool result =m.result();
Assert.IsTrue(result);
}
[TestMethod()]
public void resultTests2(){
main m = new main();
bool result =m.result();
Assert.IsFalse(result);
}
質問意図としては、result関数をそのまま呼ぶと、mainクラスのget関数が呼ばれてしまいます。
そこで、result関数が呼ぶget関数をresultTests1関数なら"AAA"を固定で返す関数に切り替え、resultTests2関数なら"BBB"に切り替えを行いたいと思っております。
ただ、まさにその切り替え方法がわからず、ご教授頂けないかと質問させていただいた次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Excel(エクセル) Excel 参照元の値を参照したい 1 2022/08/20 18:58
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- その他(Microsoft Office) Excel 2列分のDATAの並べ替え 1 2023/01/01 17:12
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- 数学 代数学 環 1 2022/10/12 17:29
- 高校受験 高校受験を控える中3です。 質問があります。学校で定期テストがなくなりました。今まではテストがあった 2 2022/06/17 22:59
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#の単体テストでローカル変数...
-
VBからBeckyを使用したメール送...
-
テストオペレーターとして採用...
-
納品 vs ご納品 どちらが正し...
-
「スポット受注」はどういう意...
-
グーグルの障害者訓練プログラ...
-
敬語チェックお願いします!
-
合意済み仕様の商品納入後にお...
-
IT業界はまだまだ伸びますか?
-
スーパーなどで今時期ドリンク...
-
電子納品
-
自前でWebサーバ設置
-
サーバのスペックの選定方法に...
-
発注書と見積書の品番が異なっ...
-
システムを作るにあたり、SQLSe...
-
契約書の「重大な背信行為」は...
-
三菱製PLC:ファイルレジスタ(...
-
コンテキストダイアグラムって...
-
購入手続き後の値上げ
-
Windows server 2022 CALとSQL ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
texに関する初歩的な質問
-
JUnit結果出力をファイルに書き...
-
C#単体テストで同クラス内の呼...
-
UPS APC製 C#2005でバッ...
-
Verilogの参考書のお勧めを教え...
-
C#の単体テストでローカル変数...
-
Visial C++におけるプログラミング
-
携帯サイトのテスト
-
Mac上でCGIのテストをしたいです
-
ホームページ・ビルダーで「e...
-
プログラムの動作テストの仕事...
-
テスト仕様書作成って初心者(...
-
Javaランタイムの対応OSについて
-
HWNDへの変換
-
VBからBeckyを使用したメール送...
-
Excel-VBA コンテンツの作成日時
-
単体試験 ブラックボックステス...
-
仕様書について
-
P2P地震速報のEEW APIの仕様書...
-
VB6 コードでメニュー作成
おすすめ情報
開発環境はVisualStudio2015 Professionalになります。