我正在编写一个将用Socket初始化的类。我想使用NUnit DynamicMock编写测试。
如何在不费力的情况下创建Socket的模拟?
DynamicMock DynamicSocketMock = new DynamicMock(typeof (Socket));
/*No ERROR - BUT I THINK HERE IS THE PROBLEM*/
Socket SocketMock = (Socket) DynamicSocketMock.MockInstance;
/*RUNTIME ERROR*/
ToBeTested Actual = new ToBeTested(SocketMock);
/*NEVER REACHED*/
编辑#1
我看着moq nad它看起来很不错但是我仍然无法测试。我最初的问题是找到要使用的rigth版本,但我想我解决了这个问题。
var Mock = new Mock<Socket>();
Socket MockSocket = (Socket)Mock.Object;
ToBeTested Actual = new ToBeTested(SocketMock);
问题是Socket没有没有参数的构造函数。现在我不想给它一个参数,我想模仿一切。
编辑#2 这似乎是lot of people的问题。目标是直接从套接字创建模拟。
答案 0 :(得分:2)
我认为模拟Socket
是一个相当高级的任务NUnit DynamicMock不适合它,毕竟他们并没有假装是一个真正强大的模拟解决方案。
我个人使用Moq,由于Socket类没有密封,我认为使用Moq进行模拟应该非常简单,适合您的需求。
Nunit DynamicMock没有很好的文档记录,并且在互联网上有代表,但我在这里看了一下构造函数的代码
看起来不应该使用除接口之外的任何东西,所以你需要在需要时查看真正的模拟框架。
答案 1 :(得分:0)
我解决了我的问题。
答案是使用Interfaces的DynamicMock。
Moq只是与繁荣参数,或者,因为我想要很多次 - 这就是我做的:
public class Test_MockSocket : Socket
{
public Test_MockSocket() : base (
(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 30000)).AddressFamily,
(SocketType.Stream),
(ProtocolType.Tcp))
{
}
}
设置测试时:
var Mock = new Mock<Test_MockSocket>();
Socket MockSocket = (Socket)Mock.Object;
ToBeTested Actual = new ToBeTested (MockSocket);
我不认为你能用比这更少的努力来获得它。