IService
给定一个具有Method1()
和的接口Method2()
。
我想测试当Method1()
抛出一个Exception
, Method2(
) 被调用并返回一个给定的值。
(在抛出Method2()
时调用)。Method1()
因此我需要Method2()
用一个 fake来测试一个 real Method1()
,它们是同一个接口的方法。
这是我的测试代码:
MBase sut.MethodX()
是唯一的入口点。它使用IService
.
我的目的是断言Method2()
返回一些东西。
// Arrange
// Fake bytes in.
var networkStreamMock = new Mock<INetworkStream>();
networkStreamMock.Method1(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>())).Returns(It.IsAny<byte[]>());
// Force throw TimeoutException.
var mock = new Mock<IService>();
mock.Setup(x => x.Method1(new Message
{
Xml = Xml,
}
)).Throws<TimeoutException>();
// Check Method 2 is called. (this is done in its own test so commented out)
// mock.Setup(m => m.Method2(It.IsAny<Message>())).Verifiable();
// New MBase.
IKernel kernel = new StandardKernel(new FakeBindings());
kernel.Rebind<IService>().ToConstant(mock.Object);
MBase sut = kernel.Get<M>();
// Act
sut.MethodX(networkStreamMock.Object);
// Here I would like to assert on the return value of Method2
mock.Verify(m => m.Method2(It.IsAny<Message>()));
使用 Moq 或其他模拟框架可以做到这一点吗?我该怎么做?我可以创建一个带有虚假实现Method1()
和真实实现的手动模拟,Method2()
但我想知道是否有更好的方法。
我已经单独测试过IService
,但我现在想测试它与MBase
.