2009/05/19 05:53
moq를 사용하기 위해서는 메소드가 추상 메소드이어야 한다. 즉 virtual로 선언되어 있거나 interface 안에 선언되어 있어야 한다. moq를 이용해서 TcpClient와 같은 System class를 직접 mocking할 수는 없다. TcpClient를 mocking하는 한 가지 방법은 Adapter 패턴 을 사용하는 것이다.
- public interface ITcpClient
- {
- void Connect(string host, int port);
- Stream GetStream();
- }
- public class TcpClientAdapter : ITcpClient
- {
- private readonly TcpClient _client;
- public TcpClientAdapter(TcpClient tcpClient)
- {
- _client = tcpClient;
- }
- public void Connect(string host, int port)
- {
- _client.Connect(host, port);
- }
- public Stream GetStream()
- {
- return _client.GetStream();
- }
- }
이제 TcpClient 클래스 대신 ITcpClient 인터페이스를 moq에서 사용할 수 있다.
- var tcpClientMock = new Mock<ITcpClient>
(); - var streamMock = new Mock
<Stream>(); - streamMock.Setup(stream => stream.ReadByte()).Returns(0x03);
- tcpClientMock.Setup(tcp => tcp.GetStream()).Returns(streamMock.Object);
더 좋은 방법은 없을까?
'C#' 카테고리의 다른 글
| [C#] region을 사용해서 코드를 깔끔하게 (0) | 2009/06/08 |
|---|---|
| [C#][moq] TcpClient와 같이 sealed된 class mocking하기 (3) | 2009/05/19 |
| [C#] is 와 as (0) | 2009/05/14 |
| [C#] Resharper, unittest.net, moq를 이용해서 unit test 만들어보기 (0) | 2009/05/12 |
| [C#] 숫자(int) 혹은 문자열(string)을 바이너리(byte)로 변환하기 (1) | 2009/04/25 |
| [C#] 테스트 주도 개발(TDD)을 해 보자. (2) | 2009/04/20 |