MoQ を使用して部分スタブを作成するコードがあります。インターフェイスの実装が異なる場合に単体テストを変更する必要がないように、具体的な実装ではなくインターフェイスとやり取りすることをお勧めします。
たとえば、次のようなファクトリ メソッドがあります。
private Mock<ISomeInterface> ISomeInterfaceStubFactory()
{
return new Mock<SomeConcreteImplementation>();
}
メソッドを呼び出すコードは次のとおりです。
var partialStub = ISomeInterfaceStubFactory();
partialStub.Setup(m => m.MethodToStubOutThatMethodToTestCalls(It.IsAny<string>())).Returns(new List<SomeOtherObject>());
partialStub.CallBase = true;
var actualResult= partialStub.Object.MethodToTest();
Assert.That(actualResult, Is.EqualTo(expectedResult));
問題は、これを行うと ISomeInterfaceStubFactory がコンパイルされないことです。そこで以下のように変更したのですが、こうすると部分スタブが壊れてしまうようです。スタブ化されたバージョンではなく、実際に実装されMethodToStubOutThatMethodToTestCalls
た操作が呼び出されます。基本的には、スタブ オブジェクトでポリモーフィズムを使用しようとしています。とにかくこれを行うことはありますか?単体テストが具体的な実装と強く結び付けられないようにしたいと思います。
private Mock<ISomeInterface> ISomeInterfaceStubFactory()
{
return new Mock<SomeConcreteImplementation>.As<ISomeInterface>();
}