如何在MSTest中处理IDisposable fixture成员
本文关键字:IDisposable fixture 成员 处理 MSTest | 更新日期: 2025-03-17 22:10:36
我有一个测试类,里面有一些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);
}
不幸的是,在MSTest中,ClassCleanup方法必须是static
,这意味着没有地方挂接要处理的调用。这是否意味着我需要在每次单独测试前后重建这些流?
简短的回答是肯定的。您需要在每次测试之前重构这些流,并在每次测试之后处理它们。使用[TestCleanup]和[TestInitialize]属性很容易做到这一点。
因此,与其在测试类中构建流:SuppressionDatabaseTest,不如使用[TestInitialize]