小编big*_*oot的帖子

具有动作/函数参数的接口的Moq设置

我试图模拟对服务器的调用,并验证测试的代码调用正确的方法.代码结构如下:

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)

c# unit-testing moq

4
推荐指数
1
解决办法
4507
查看次数

标签 统计

c# ×1

moq ×1

unit-testing ×1