2009-05-12 18 views
8

Kısa cevabın Mocks olduğunu biliyorum ama herhangi bir örnek iyi olurdu.SerialPort'a bağlı bir sınıf için birim sınamalarını nasıl yazarım?

  1. Bağlan
  2. benim sınıf olaylar tetiklendiğini
  3. Testi yeniden girişimi neden veri iletiminde kümesi aralıklarla
  4. Pause veri alma ayırın /: Aşağıdaki test etmek gerekiyor beklenen. Başlangıç ​​olarak

, bana sadece bir seri port daha iyi kontrol edebilecek herhangi akışına bağlanmak için sınıfını almasını sağlayacaktır akışı, kullanacağı bir arabirim tanımlayan düşünüyorum edildi ve programatik olarak yapmamı sağlar. Eğer birinin daha iyi bir fikri varsa, bunu takdir ediyorum.

cevap

2

http://en.wikipedia.org/wiki/COM_port_redirector, bazı ücretsiz/açık kaynak kodlu COM bağlantı noktalarını/yönlendiricilerini listeler;

+0

Teşekkürler Khurram, Zaten iyi çalışan bir sanal seri sürücüm var, ama benim bağlantı noktası davranışını el ile test etmemi gerektirir. 'Dostum' bağlantı noktasını açıp veri göndermeyi otomatikleştirebilirim, ancak bunu yapmanın daha temiz bir yolunu tercih ederim. Önerinizi yanlış anlamadıkça. –

0

Aşağıdakileri başarıyla kullandım, ancak yalnızca verilerin işlenmesini ve iç zamanlamaları sınamak için kullanıyorum. Bu SerialPort'un kendisini kapatarak/açarak TestingClass ile baş edemez. Entegrasyon testi yerine birim test gerçekleştirmek istediğiniz gibi

3

Sesler

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 
      } 
     } 

?

Eğer birim testi demek ise, olabilir:

  1. sargıyı bir belki arayüzü, iport
  2. bir SerialPort gerektirir sınıfa bu geçirin ver seri port
  3. etrafında sarıcı oluşturma
  4. Mock

geçirilen 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(); 
    } 
} 

Şimdi Data Retriever sınıfını test edebilirsiniz. Çerçeveye yaklaştığınızda (SerialPort sarıcı gibi) beklenmedik bir şekilde test edemezsiniz. Bunu entegrasyon testlerine bırakmanız gerekecek.

İlgili konular