Molesを使用してSystem.Net.SocketsのSocketクラスをモックしようとしています。私は正常に.molesファイルを生成し、System.Net.Molesアセンブリを参照に追加しましたが、MSocketクラスは生成されませんでした。実際には、MIPEndPointCollectionクラスだけが生成されます。ここでMolesを使用してSystem.Net.Socketsをモックする
は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;
}
}
}
DUMYテストクラス:
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を使ってこれを行うことにのみ関心があります。私の経験で
--Thanksダニエル
:あなたの.molesファイルの2行目のためにこれを試してみてくださいモルズを使ってこれをやっている」 ** IMHO **これは唯一の正当な理由です。あなたが比較的大きなレガシーコードベースを扱っている場合です。そうでない場合は、ラッパー+インターフェースを参照してください。 – TrueWill
@TrueWillそれは私が最近見たあなたのブログ記事と一貫しているようです。私は、あなたのコードをできるだけデカップルされた状態に保つために、外部性のための薄くて切り取られたラッパーのコンセプトが好きです。私はXDocument APIのような単純なものでも、これを試してみましたが、一般的には堅実なアプローチであることがわかりました。 –