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も見ています
-
とっておきの「夜食」教えて下さい
真夜中に小腹がすいたときにこっそり作るメニュー、こっそり家を抜け出して食べに行くお店… 人には言えない、けど自慢したい、そんなあなたの「とっておきの夜食」を教えて下さい。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
CloseとDisposeの違い
Visual Basic(VBA)
-
C#の単体テストでローカル変数のインスタンス内関数を差し替える方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#の単体テストでローカル変数...
-
texに関する初歩的な質問
-
Visial C++におけるプログラミング
-
C#単体テストで同クラス内の呼...
-
納品 vs ご納品 どちらが正し...
-
納入日と納品日について
-
「スポット受注」はどういう意...
-
テストについて
-
Zと2とか紛らわしいのがあるか...
-
オーバレイ方式と仮想記憶シス...
-
Windows server 2022 CALとSQL ...
-
Javaで家計簿を作成
-
中小企業に対しての分割検収
-
納期の前倒しを依頼する場合 ...
-
敬語チェックお願いします!
-
VC++ ラジオボタンの初期値に...
-
エントリーシート
-
formで送信したPOSTデータの削...
-
PostgreSQL+DataGridView
-
発注書と見積書の品番が異なっ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
texに関する初歩的な質問
-
VBからBeckyを使用したメール送...
-
Visial C++におけるプログラミング
-
C#単体テストで同クラス内の呼...
-
Verilogの参考書のお勧めを教え...
-
C#の単体テストでローカル変数...
-
VB6 コードでメニュー作成
-
ホームページ・ビルダーで「e...
-
テスト仕様書作成って初心者(...
-
テスト仕様書の著作権について
-
JUnit結果出力をファイルに書き...
-
半加算器について
-
ハノイ塔の非再帰について
-
仕様書に書かれていないこと
-
メッセージボックスのタイトル設定
-
ソフト開発に関する仕様書の書...
-
すみません 日本語について聞き...
-
ショッピングカートとプラウザ...
-
単体試験 ブラックボックステス...
-
自作ゲームについて・・・
おすすめ情報
開発環境はVisualStudio2015 Professionalになります。