保護されたヘルパーを呼び出すコードをテストするためにMOQを使用する方法次:は次のようになり、私は現在、テストを実行
// In Blah.cs
public class ClassUnderTest
{
public bool MethodUnderTest()
{
// Do a bunch of stuff...
return HelperMethod();
}
protected virtual bool HelperMethod()
{
bool success = false;
// Proprietary Hardware Access.
// Database Calls.
// File System Modifications.
return success;
}
}
// In TestBlah.cs
public class TestStub : ClassUnderTest
{
public bool HelperMethodReturnValue;
protected override bool HelperMethod()
{
return HelperMethodReturnValue;
}
}
[TestClass]
public class TestingClass
{
[TestMethod]
public void ClassUnderTest_MethodUnderTest_TestHelperReturnsTrue()
{
var stub = new TestStub();
stub.HelperMethodReturnValue = true;
Assert.IsTrue(stub.MethodUnderTest());
}
[TestMethod]
public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()
{
var stub = new TestStub();
stub.HelperMethodReturnValue = false;
Assert.IsFalse(stub.MethodUnderTest());
}
}
上記の単純なもののために正常に見えるが、しかし、スタブクラスはすぐに指数関数的に大きく、より複雑になります。 私はMoqを使ってスタブクラスを置き換えたいと思います。しかし、何らかの理由で保護されたメソッドに戻り値を設定できないため、これはコンパイルされません。
[TestMethod]
public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()
{
var mockClass = new Mock<ClassUnderTest>();
mockClass.Protected().Setup("HelperMethod").Returns(false);
Assert.IsFalse(mockClass.Object.MethodUnderTest());
}
これを行う方法については誰でも知っていますか? moqでこれを行うことはできますか?
何かがここにないように思われます...あなたはあなたのSUTを嘲笑せず、あなたはその依存関係を模倣します。 –
ええ、実際にYojinはSUTの一部を置き換えて保護されたヘルパーメソッドではなく、別々に保つ必要があります。 – Matthias