2012-09-04 46 views
1

我有一個測試課,裏面有一些IDisposable項目。這是我在做這樣的事情第一次嘗試:如何處理MSTest中的IDisposable夾具成員?

private MemoryStream toolExampleMs; 
private MemoryStream issueClassExampleMs; 
private MemoryStream issueTypeExampleMs; 
private MemoryStream uniqueIdExampleMs; 

private Check exampleCheck; 

public SuppressionDatabaseTest() 
{ 
    this.toolExampleMs = new MemoryStream(Encoding.UTF8.GetBytes(toolExample)); 
    this.issueClassExampleMs = new MemoryStream(Encoding.UTF8.GetBytes(toolExample)); 
    this.issueTypeExampleMs = new MemoryStream(Encoding.UTF8.GetBytes(issueTypeExample)); 
    this.uniqueIdExampleMs = new MemoryStream(Encoding.UTF8.GetBytes(uniqueIdExample)); 

    this.exampleCheck = new Check(); 
    this.exampleCheck.IssueClass = "FooBarClass"; 
    this.exampleCheck.IssueType = "FooBarType"; 
    this.exampleCheck.Key = "FooBarExactWith?Unicode"; 
} 

[ClassCleanup] 
public void CleanupAll() // Error: CleanupAll has the wrong signature 
{ 
    toolExampleMs.Dispose(); 
    issueClassExampleMs.Dispose(); 
    issueTypeExampleMs.Dispose(); 
    uniqueIdExampleMs.Dispose(); 
} 

[TestCleanup] 
public void Cleanup() 
{ 
    this.toolExampleMs.Seek(0, SeekOrigin.Begin); 
    this.issueClassExampleMs.Seek(0, SeekOrigin.Begin); 
    this.issueTypeExampleMs.Seek(0, SeekOrigin.Begin); 
    this.uniqueIdExampleMs.Seek(0, SeekOrigin.Begin); 
} 

不幸的是,ClassCleanup方法必須在MSTest的static,這意味着沒有地方勾調用處理。這是否意味着我需要在每次單獨測試之前和之後重新構建這些流?

+0

難道你不想要?這些流不應該用於在測試之間存儲或傳遞信息;無論每次測試或所有測試可能需要進行什麼設置和拆卸,測試都應該在理論上與訂單無關。他們的實際順序是什麼,不管它是按字母順序排列的,按照定義還是完全隨機排列,都沒有什麼區別,沒有測試應該取決於另一個測試是否成功。 – KeithS

+0

@KeithS:流不會被任何測試修改。只是看起來很浪費 –

回答

2

簡短答案是肯定的。您需要在每次測試之前重新構建這些流,並在每次測試後處理它們。使用[TestCleanup]和[TestInitialize]屬性很容易。

因此,而不是構建您的視頻流在您的測試類:SuppressionDatabaseTest使用[TestInitialize]

相關問題