gpt4 book ai didi

c# - 如何处理 MSTest 中的 IDisposable fixture 成员?

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:20 24 4
gpt4 key购买 nike

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

最佳答案

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

因此,不要在测试类中构建流:SuppressionDatabaseTest 使用 [TestInitialize]

关于c# - 如何处理 MSTest 中的 IDisposable fixture 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com