我有一个班级客户。
它具有以下方法,
public class Client
{
public Client(string portNum);
public void Init();
public void SendMsg(byte[] msg);
public byte[] Receive();
}
我正在使用该类进行交流。客户是第3方库中的类,因此我无法编辑客户类。
我需要为客户端编写一个Mock类,以对我的类进行单元测试。
我正在使用Visual Studio单元测试。 .Net 4.5。
对于模拟,我正在使用Moq.dll。
我尝试如下
[TestMethod]
public void TestSend()
{
var mockClient = new Mock<Client>();
mockClient.Setup(x => x.SendMsg(It.IsAny<byte[]>())).Callback<byte[]>((m) => Send(m));
Assert.IsTrue(isInit);
}
private void Send(byte[] msg)
{
}
它引发如下异常:
类型“ System.NotSupportedException”的异常发生在
Moq.dll,但未在用户代码中处理
附加信息:在非虚拟设备上无效的设置(可在
VB)成员:x => x.SendMsg(It.IsAny())
任何人都可以打电话给我,我已经做到了。以及如何纠正它。
提前致谢。
最佳答案
评论说明了一切-您不能以此方式嘲笑。
你可以做什么:
1.根据需要设置一个(精简)界面:
public interface IClient
{
public void Init();
public void SendMsg(byte[] msg);
public byte[] Receive();
}
2.围绕客户实施立面以实现它:
public class MyClient : IClient
{
private Client _client;
/* implement everything in the obvious way by using the private field */
}
3.在代码中使用接口而不是
Client
对不起,对此没有看到任何东西
只需插入
IClient
而不是Client
并将其注入到构造函数中即可。4.模拟界面
[TestMethod]
public void TestSend()
{
var mockClient = new Mock<IClient>();
mockClient.Setup(x => x.SendMsg(It.IsAny<byte[]>())).Callback<byte[]>((m) => Send(m));
// ....
Assert.IsTrue(isInit);
}
关于c# - C#中类参数的模拟类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24668568/