使用Moles模拟System.Net.Sockets
本文关键字:Net Sockets System 模拟 Moles 使用 | 更新日期: 2023-09-27 18:25:09
我正试图使用Moles来模拟System.Net.Sockets中的Socket类。我已经成功地生成了.Moles文件,并在构建它时向我的引用中添加了一个System.Net.Moles程序集,但它没有生成MSocket类。实际上,只生成MIPEndPointCollection类。
下面是一个使用System.Net.Sockets.Socket:的示例类
using System.Text;
using System.Net.Sockets;
namespace MyProject
{
public static class Communicator
{
public static int Send(string messages)
{
byte[] bytes = Encoding.ASCII.GetBytes(messages);
int bytesSent = 0;
using (Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp))
{
socket.Connect("localhost", 1234);
bytesSent = socket.Send(bytes);
}
return bytesSent;
}
}
}
一个愚蠢的测试类:
using MyProject;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Net.Moles;
using Microsoft.Moles.Framework;
[assembly: MoledType(typeof(System.Net.Sockets.Socket))]
namespace MyProjectTest
{
[TestClass()]
public class CommunicatorTest
{
private TestContext testContextInstance;
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
[TestMethod()]
[HostType("Moles")]
public void SendTest()
{
//dose not exist in the System.Net.Moles namespace:
//MSocket.Send = deligate(){ return 0; };
int bytesSent = Communicator.Send("Test Message");
Assert.AreEqual(0, bytesSent);
}
}
}
还有我的.moles文件:
<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
<Assembly Name="System.Net" />
</Moles>
有人能指出这是怎么回事吗?以及该怎么做才能让它发挥作用。我知道还有其他方法可以模拟Socket类,例如用一个实现我自己接口的包装器类,但我只对使用Moles来实现这一点感兴趣。
--感谢Daniel
根据我的经验,Moling系统程序集很古怪。在.moles文件的第二行试试这个:
<Assembly Name="System" ReflectionOnly="true" />