次の例では、TestMe.DoSomething()
関数をテストします。
このメソッド内で使用されるインターフェイスをモックし、ISomething
別の値を返すようにします (特定の単体テストに応じて)。
実生活では、ISomething
インターフェースは高価なサードパーティのリソースを呼び出すことになりますISomething
.
構造の例を次に示します。
class TestMe
{
public void DoSomething()
{
ISomething s = SomethingFactory();
int i = s.Run();
//do things with i that I want to test
}
private ISomething SomethingFactory()
{
return new Something();
}
}
interface ISomething
{
int Run();
}
class Something : ISomething
{
public int Run()
{
return 1;
}
}
動作しないコードは次のとおりです。
var fakeSomething = new Mock<ISomething>();
var testMe = new TestMe();
Mock.Get(testMe).Setup(p => p.SomethingFactory()).Returns(fakeSomething.Object);
testMe.DoSomething();
SomethingFactory()
isであるためprivate
、そのメソッドからの戻り値を希望どおりに設定することはできません。
これを解決する方法について何かアドバイスはありますか?