プロが教える店舗&オフィスのセキュリティ対策術

C#の単体テストで、MSTestを使用してテストを実施します。
開発環境はVisualStudio2015 Professionalになります。
このテストの対象関数に、他クラスの関数呼び出しを行う処理を持ったものがあるのですが、インスタンスはローカルで生成します。
こういった場合に、呼び出し先関数処理をテストケースごとに差し替えることは可能でしょうか?
「public virtual」と「public override」を用いて差し替える方法は、別質問でお伺いしたのですが、これについてはテスト対象関数と同クラス内であれば通用するものという認識です。
テスト対象関数の例は以下になります。

public class MainClass{
public bool start(){  ←テスト対象関数
SubClass s = new SubClass();
return s.Get();
}
}
internal class SubClass{
public bool Get(){  ←処理を差し替えたい関数
CSVファイル読み込み処理;
データ解析;
if(読み込みデータが正常データ){
return true;
}
else{
return false;
}
}
}

Get関数をテストケースごとにtrue固定、false固定に処理を差し替えたいと考えています。
※CSVファイルをテストケースごとに変更する、という方法は、この質問では無しにしてください。

A 回答 (2件)

>ただ、関数個々で全部やれ、という意向のようなんです。



だから、SubClassのテストを書いて、ターゲットであるstart()のほうはおっしゃるようなfakeクラスを作ってテスト書けばいいのでは、と思います。
そうすればカバレッジは満足されるでしょう。
    • good
    • 0

これ、もはや単体テストではないのでは?


SubClass「単体」のテストを書けば一発なのに…と感じます。
複数クラスの結合オブジェクトが対象であれば、それは結合テストですね。

どうしてもこの形で書かなければならない事情があるのでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
私も同じ気持ちなんです。。。
ただ、関数個々で全部やれ、という意向のようなんです。
そのため、結合ではなく、単体にする必要がある、ということで、差し替えられないものかと悩んでいるところになります。
ただ、やはり差し替え困難な気がするので、シンボル定義のtrue用、false用を作ってGET関数に入れるしかないのかな、と思ってしまってたりします。

お礼日時:2018/09/26 16:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!