ファクトリ()を使用するクラスをテストしようとしていますが、Func<T>
MoqとAutoFixtureを使用しています。
「環境」をセットアップして、ファクトリが使用されているかどうか、および返されたインスタンスで何回、どのメソッドが使用されているかを確認するための最良の方法は何ですか?
現在、私はモックを作成してT
おりInjecting
、Func<T>
返されたすべてのモックインスタンスのカウントを保持しています。
public class SystemUnderTest {
public SystemUnderTest(Func<IMyClass> c)
{
try {
var c1 = c();
c1.Name="n1";
c1.Send();
}
catch(Exception){
var c2 = c();
c2.Name="n2";
c2.Send();
}
}
}
private Mock<IMyClass> MockFactory()
{
var m = new Mock<IMyClass>();
m.SetupProperty(mc=>mc.Name);
_returnedStubs.Add(m);
return m;
}
[Test]
public void TestSomething()
{
var fixture = new Fixture();
fixture.Inject(()=>MockFactory().Object)
var sut = fixture.CreateAnonymous<SystemUnderTest>();
Assert.That(_returnedStubs.Count,Is.Equal(1));
_returnedStubs[0].Verify(m=>m.Send(),Times.Exactly(1));
_returnedStubs[0].Verify(m=>m.Name = "n1");
}
しかし、それは私にはちょっと気難しい/醜い感じがします。そして、テストクラスのインスタンス変数は危険なものだと確信しています