在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值?

在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!
    }
}
相关文章:
  • 没有找到相关文章