1
Mole을 사용하여 System.Net.Sockets의 Socket 클래스를 모의하려고합니다. .moles 파일을 성공적으로 생성하고이를 작성하여 System.Net.Moles 어셈블리를 내 참조에 추가했지만 MSocket 클래스를 생성하지는 않습니다. 사실 MIPEndPointCollection 클래스 만 생성됩니다.두더지를 사용하여 System.Net.Sockets 모의
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>
다음
은을 System.Net.Sockets.Socket를 사용하는 샘플 클래스입니다
누군가가이 문제가 무엇이 었는지와 그것이 효과를 내기 위해 무엇을해야하는지 알려줄 수 있습니까? 내 자신의 인터페이스를 구현하는 래퍼 클래스로 예를 들어 Socket 클래스를 조롱하는 다른 방법이 있지만 저는 Moles를 사용하여이를 수행하는 데에만 관심이 있다는 것을 알고 있습니다.
--Thanks 다니엘은 내 경험에
"나는 내 자신의 인터페이스를 구현하는 래퍼 클래스와 함께 예를 들어, Socket 클래스를 조롱하는 다른 방법이 있다는 것을 알고 있지만 나는에만 관심이 있어요 Moles를 사용하여이 작업을 수행합니다. " ** IMHO ** ** 유효한 유일한 이유는 비교적 큰 레거시 코드베이스를 다루는 경우입니다. 그렇지 않은 경우 래퍼 + 인터페이스로 이동하십시오. – TrueWill
@ TwitterWill 당신이 최근에 본 당신 블로그 포스트와 일치하는 것 같습니다. 필자는 코드를 가능한 분리 된 상태로 유지하기 위해 외부 효과에 대한 얇고 박탈 된 래퍼 개념을 좋아합니다. 나는 XDocument API처럼 단순한 것으로 실험 해 보았고 일반적으로 견고한 접근 방법을 찾았다. –