【问题标题】:How does one deal with IDisposable fixture members in MSTest?如何处理 MSTest 中的 IDisposable 夹具成员?
【发布时间】:2012-09-05 06:18:35
【问题描述】:

我有一个测试类,里面有一些 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,这意味着没有地方可以挂起要处理的调用。这是否意味着我需要在每次单独测试之前和之后重建这些流?

【问题讨论】:

  • 你不想吗?流不应用于在测试之间存储或传递信息;无论每个测试或所有测试可能需要什么样的设置和拆卸,测试在理论上都应该是与顺序无关的。它们实际运行的顺序,无论是按字母顺序、定义还是完全随机的,都应该没有区别,任何测试都不应该依赖于另一个成功的测试。
  • @KeithS:流不会被任何测试修改。只是看起来很浪费

标签: c# mstest


【解决方案1】:

简短的回答是肯定的。您需要在每次测试之前重建这些流,并在每次测试后处理它们。这很容易使用 [TestCleanup] 和 [TestInitialize] 属性。

所以不要在测试类中构建流:SuppressionDatabaseTest 使用 [TestInitialize]

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多