【发布时间】:2016-06-17 23:43:06
【问题描述】:
我正在使用带有 NUnit 的 TestCaseSource。下面的代码生成代表一个归档条目的 TestCaseData 的 IEnumerable,它是一个测试的输入。
private class GithubRepositoryTestCasesFactory
{
private const string GithubRepositoryZip = "https://github.com/QualiSystems/tosca/archive/master.zip";
public static IEnumerable TestCases
{
get
{
using (var tempFile = new TempFile(Path.GetTempPath()))
using (var client = new WebClient())
{
client.DownloadFile(GithubRepositoryZip, tempFile.FilePath);
using (var zipToOpen = new FileStream(tempFile.FilePath, FileMode.Open))
using (var archive = new ZipArchive(zipToOpen, ZipArchiveMode.Read))
{
foreach (var archiveEntry in archive.Entries.Where(a =>
Path.GetExtension(a.Name).EqualsAny(".yaml", ".yml")))
{
yield return new TestCaseData(archiveEntry);
}
}
}
}
}
}
[Test, TestCaseSource(typeof (GithubRepositoryTestCasesFactory), "TestCases")]
public void Validate_Tosca_Files_In_Github_Repository_Of_Quali(ZipArchiveEntry zipArchiveEntry)
{
var toscaNetAnalyzer = new ToscaNetAnalyzer();
toscaNetAnalyzer.Analyze(new StreamReader(zipArchiveEntry.Open()));
}
上述代码在以下行失败:
zipArchiveEntry.Open()
有一个例外:
System.ObjectDisposedException “无法访问已处置的对象。 对象名称:'ZipArchive'。"
有没有办法控制为测试数据用例创建的对象的处置?
【问题讨论】:
-
如何在静态变量中记住创建的对象并在 TestFixtureTearDown 中调用每个对象的 Dispose()。
-
@scher 是的,有可能,但会不太漂亮。
标签: c# nunit nunit-3.0 testcasesource