2009-05-12 2 views
8

나는 짧은 대답은 모의라는 것을 알고 있지만 어떤 예도 좋을 것이다.SerialPort에 의존하는 클래스에 대한 단위 테스트를 작성하려면 어떻게합니까?

  1. 연결이
  2. 내 클래스 이벤트가 발사되는
  3. 테스트를 다시 연결을 시도하는 원인, 데이터 전송에 설정된 시간 간격으로
  4. 일시 정지 데이터를 수신 분리/: 나는 다음과 같은 테스트 할 수 있어야합니다 예상했다.

처음에는 스트림을 사용하는 인터페이스를 정의 할 생각이었습니다. 클래스를 직렬 포트보다 잘 제어 할 수있는 스트림에 연결하도록 허용 할 수있었습니다. 프로그래밍 방식으로 처리 할 수 ​​있습니다. 누구든지 더 좋은 아이디어가 있다면, 나는 그것을 크게 고맙게 생각합니다.

답변

2

http://en.wikipedia.org/wiki/COM_port_redirector은 테스트에 도움이 될 수있는 일부 무료/오픈 소스 가상 COM 포트 드라이버/리디렉터를 나열합니다!

+0

감사합니다. Khurram, 저는 이미 잘 작동하는 가상 직렬 드라이버를 가지고 있지만 수동으로 포트 작동을 테스트해야합니다. '버디 (buddy)'포트를 열어 데이터를 전송하는 것을 자동화 할 수는 있지만 더 깨끗한 방법으로 자금을 조달하고 싶습니다. 내가 너의 제안을 오해하지 않았다면. –

0

아래에서 사용한 적이 있지만 데이터 처리 및 내부 타이밍을 테스트하는 데만 사용되었습니다. 이것은 SerialClass 자체를 닫거나 여는 TestingClass에 대처할 수 없습니다. 당신은 통합 테스트보다는 단위 테스트를 수행 할 같이

3

는 소리

internal void StartPipeServer(NamedPipeServerStream pipeServer) 
    { 
     Thread thread = new Thread(WaitForConnections); 
     thread.Start(pipeServer); 
    } 

    internal void WaitForConnections(object o) 
    { 
     NamedPipeServerStream pipe = (NamedPipeServerStream)o; 
     pipe.WaitForConnection(); 
    } 

HTH, RIP :

 using (NamedPipeServerStream input = new NamedPipeServerStream("Test", PipeDirection.InOut)) 
     using (NamedPipeClientStream pipeClient = new NamedPipeClientStream("Test")) 
     using (MemoryStream output = new MemoryStream()) 
     using (StreamReader inSerial = new StreamReader(pipeClient)) 
     using (StreamWriter outSerial = new StreamWriter(svpConsumer)) 
     { 
      StartPipeServer(input); 
      pipeClient.Connect(); 
      using (TestingClass myTest = new TestingClass(onSerial, outSerial)) 
      { 
       input.Write(...); 
       input.Flush(...); 
       Assert on checking output 
      } 
     } 

?

당신이 단위 테스트를 의미하는 경우, 당신은 할 수 :

  1. 는 래퍼에게 아마도 인터페이스, 파라미터 : iport
  2. 하여 SerialPort를 필요로하는 클래스로이 전달 보내기 직렬 포트
  3. 래퍼 만들기
  4. 모의

전달 된 SerialPost
internal interface IPort 
{ 
    void Connect(); 
    //Other members 
} 

internal class SerialPort : IPort 
{ 
    public void Connect() 
    { 
     //Implementation 
    } 
} 

public class DataRetriever 
{ 
    private IPort _port; 
    public DataRetriever(IPort port) 
    { 
     _port = port; 
    } 

    public void ReadData() 
    { 
     _port.Connect(); 
    } 
} 

이제 Data Retriever 클래스를 테스트 할 수 있습니다. Unfortinatly 프레임 워크 (예 : SerialPort 랩퍼)에 가까워지면 유닛 테스트를 수행 할 수 없습니다. 이를 통합 테스트에 맡겨야합니다.

관련 문제