在ClassCleanup中访问CurrentTestOutcome
本文关键字:CurrentTestOutcome 访问 ClassCleanup | 更新日期: 2023-09-27 18:05:19
使用c# 4.0。我有一个单元测试,我需要创建一个临时数据库。这是在类初始化期间完成的:
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// Create database!
}
[ClassCleanup()]
public static void MyClassCleanup()
{
// Remove database IF CurrentTestOutcome == UnitTestOutcome.Passed
}
Q:如何从ClassCleanup
方法中读取CurrentTestOutcome
值?
我建议您创建一个静态标志,您可以从您的MyClassCleanup
访问,并在测试清理期间设置它,当您得到一个错误。在你的类中有如下内容:
[TestClass]
public class MyTests {
static bool _testFailed;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// Create database!
_testFailed = false;
}
[ClassCleanup()]
public static void MyClassCleanup()
{
if(_testFailed == false) {
// Remove database IF CurrentTestOutcome == UnitTestOutcome.Passed
}
}
[TestCleanup()]
public void MyTestCleanup() {
if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed) {
_testFailed = true;
}
}
public TestContext TestContext { get; set; }
}
我建议采用上述方法,因为我的理解是,在您的类清理中,参考CurrentTestOutcome
不会真正起多大作用。它只包含要运行的最后一个测试的状态,而不是类中所有测试的组合结果。
我正在考虑以下解决方案。我不确定这是否可以被认为是好的做法。
private static IList<TestContext> testResults;
public TestContext TestContext
{
get
{
return testContext;
}
set
{
testContext = value;
testResults.Add(testContext);
}
}
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
testResults = new List<TestContext>();
}
[ClassCleanup()]
public static void MyClassCleanup()
{
if (testResults.All(t => t.CurrentTestOutcome == UnitTestOutcome.Passed ||
t.CurrentTestOutcome == UnitTestOutcome.Inconclusive))
{
// Perform conditional cleanup!
}
}