Ban*_*ram 2 c# unit-testing mocking
我有一个班级客户.它有如下方法,
public class Client
{
public Client(string portNum);
public void Init();
public void SendMsg(byte[] msg);
public byte[] Receive();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用课堂进行交流.客户端是第三方库中的类,因此我无法编辑类Client.
我需要为客户编写Mock类来为我的班级做单元测试.我正在使用Visual studio单元测试..Net 4.5.对于Mock,我正在使用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)
{
}
Run Code Online (Sandbox Code Playgroud)
它如下所示抛出异常,
Moq.dll中出现"System.NotSupportedException"类型的异常,但未在用户代码中处理
附加信息:非虚拟(在VB中可覆盖)成员的无效设置:x => x.SendMsg(It.IsAny())
任何人都可以解决这个错误,我已经完成了.以及如何纠正它.提前致谢.
评论说明了一切 - 你不能以这种方式嘲笑.
你可以做什么:
public interface IClient
{
public void Init();
public void SendMsg(byte[] msg);
public byte[] Receive();
}
Run Code Online (Sandbox Code Playgroud)
public class MyClient : IClient
{
private Client _client;
/* implement everything in the obvious way by using the private field */
}
Run Code Online (Sandbox Code Playgroud)
Client在你的代码抱歉没看到这个
只需插入IClient而不是Client将其注入构造函数中.
[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);
}
Run Code Online (Sandbox Code Playgroud)