我试图模拟对服务器的调用,并验证测试的代码调用正确的方法.代码结构如下:
public interface IServerAdapter
{
void CallServer(Action<IServerExposingToClient> methodToCall, out bool serverCalled);
object CallServer(Func<IServerExposingToClient, object> methodToCall, out bool serverCalled);
}
public interface IServerExposingToClient
{
Resource GetResource(string id);
void AddResource(Resource resource);
}
Run Code Online (Sandbox Code Playgroud)
我正在测试的代码访问服务器上的一个实现IServerAdapter并调用IServerExposingToClient方法.这样做的原因是我们不希望在类中实现每个方法(它们中有很多方法)IServerExposingToClient.由于这是在代理上调用的,因此它在我们的代码中运行良好.
在服务器上调用方法是这样的:
_mainViewModel.ServerAdapter.CallServer(m => m.AddResource(resource), out serverCalled);
Run Code Online (Sandbox Code Playgroud)
现在的问题是测试和嘲笑.我需要断言AddResource在服务器上调用了method().在out serverCalled(问题1),以确保这样的逻辑,因为它应该呼叫者流动电话做了它对服务器.
当我使用以下Moq设置时,我可以断言在服务器上调用了一些方法:
Mock<IServerAdapter> serverAdapterMock = new Mock<IServerAdapter>();
bool serverCalled;
bool someMethodCalled = false;
serverAdapterMock.Setup(c => c.CallServer(It.IsAny<Action<IServerExposingToClient>>(), out serverCalled)).Callback(() => someMethodCalled = true);
// assign serverAdapterMock.Object to some property my code …Run Code Online (Sandbox Code Playgroud)