次のクラスを検討してください。
public class test
{
public void start()
{
if (true)
called();
}
internal protected virtual void called()
{
}
}
if (true)
アンダーテストを行いたい。私の最初のアイデアは、呼び出されたことを確認するために Moq を使用することでしたcalled()
。私はこのテストで終わった:
[TestFixture]
public partial class TestMethodInvocation
{
[Test]
public void TestWithMoqVerify()
{
var mock = new Mock<test>() {CallBase = true};
mock.Object.start();
mock.Verify(t => t.called());
}
}
これを機能させるのにいくつか問題があり、テスト中のクラスをモックするために Moq を使用しないようにアドバイスされたこの質問を投稿しました。
そこで、サブクラスを追加し、プロパティを使用してメソッドが呼び出されたかどうかをテストしました。
public class test2 : test
{
public bool WasCalled { get; set; }
internal protected override void called()
{
WasCalled = true;
}
}
public partial class TestMethodInvocation
{
[Test]
public void TestWithSubclassProperty()
{
var test = new test2();
test.start();
Assert.IsTrue(test.WasCalled);
}
}
どちらのアプローチも機能しますが、サブクラスを作成する必要がないため、Moq 実装は実質的にテスト コードの量の半分です。このように Moq を使用するのは非常に悪いことですか? それとも、この種のテストを行うために別のフレームワークを使用する必要がありますか? それとも、これは私のコードの設計上の問題の結果ですか?