2015-10-20 61 views
1

我現在有這樣的單元測試與StreamWriter的空隙方法的參數之一

public void BusinessMethod(object value, StreamWriter sw) 
{ 
    //Calls a private method that converts the data in `value` to a custom formatted string variable `str` 
    string str = myPrivateMethod(value); 

    //write the string to stream 
    sw.Write(str); 
} 

的方法,我想測試使用的方法,這方法提到here並準確地做同樣的事情。但是,我的result字符串作爲空字符串返回。我無法更改方法簽名。如何測試這種方法?我正在使用Nunit進行測試。

這是我的測試方法

[Test] 
    public void My_Test() 
    { 
     MyPoco dto = new MyPoco(); 
     //set up the dto properties here 

     using (var stream = new MemoryStream()) 
     using (var writer = new StreamWriter(stream)) 
     { 
      sut.BusinessMethod(dto, writer); 

      string result = Encoding.UTF8.GetString(stream.ToArray()); 
     } 
    } 
+0

什麼是你試圖驗證精確行爲? –

+0

我想,如果在發送給'BusinessMethod'的DTO被寫入流或不進行驗證。這就是所有'BusinessMethod'所負責的。 – user20358

+0

既然你的測試沒有斷言,它實際上並沒有測試任何東西。你能提供一個包含所有相關代碼的最小再現案例嗎? –

回答

3

您需要Close/Flush/Dispose作家因此它實際上提交更改流:

using (var stream = new MemoryStream()) 
{ 
    using (var writer = new StreamWriter(stream)) 
    { 
     sut.BusinessMethod(dto, writer); 
    } 
    // moved outside of inner using to ensure writer stored content to stream 
    string result = Encoding.UTF8.GetString(stream.ToArray()); 
}