NUnit-TestContext.CurrentContext.Result.Outcome.Status总是不确定的

时间:2018-10-18 16:03:10

标签: c# unit-testing selenium nunit

我注意到NUnit的TestContext.CurrentContext.Result.Outcome.Status在测试运行结束时始终是不确定的。 CurrentContext还不知道已发生任何断言。

这里的任何人都知道是否有可能在[TearDown]之前获得测试状态吗?我希望在测试管理类的Dispose()期间使用该值来捕获度量标准和其他数据,以进行测试后诊断。

新的.NET Framework 4.6.1项目中的代码示例,该项目仅具有NuGet包NUnit和FluentAssertions:

namespace TestProject
{
    using FluentAssertions;
    using NUnit.Framework;

    [TestFixture]
    public class Class1
    {
        [Test]
        public void test1()
        {
            var a = 1;
            var b = 2;
            var c = 1;

            var context = TestContext.CurrentContext;

            a.Should().Be(c);

            Assert.AreEqual(a, c);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

测试结果以Inconclusive开始。如果跳过或忽略了测试,则结果会更改,但当然永远不会执行。

如果执行,则结果为Inconclusive,直到测试结束。显然,当您仍在执行测试时,测试尚未完成。拆解开始时,测试结果是已知的,因此根据测试方法本身是否成功而有所不同。当然,拆卸中的异常可能会将结果更改为“错误”状态。

最重要的是,当测试方法本身仍在运行时,“结果”字段将无用。无论如何,如果您正在执行test方法中的代码,则测试尚未失败。否则,您将不会继续执行!

您说您不能使用TearDown,但是您提供的链接不能解决访问测试结果的问题。您能进一步解释吗?检查测试结果后到底要做什么?

答案 1 :(得分:0)

您可以尝试将AssertionScopeAssertionScope.Succeeded标志一起使用。尽管该属性的intelisense指定:

  

获取一个值,该值指示通过此作用域执行的最后一个声明是否成功。

AssertionScope

的用法示例
[Test]
public void Test()
{

    var a = 1;
    var b = 2;
    var c = 1;

    var context = new AssertionScope();

    try
    {
        throw new Exception("Test");
    }
    catch (Exception e)
    {
        context.FailWith(e.ToString());
    }

    var strings = context.Discard();

    Console.WriteLine(strings.StringJoin(","));

    context.Succeeded.Should().BeFalse();


    var someOtherContext = new AssertionScope();

    try
    {
        c.Should().Be(a);
    }
    catch (Exception e)
    {
        someOtherContext.FailWith(e.ToString());
    }

    var discard = someOtherContext.Discard();

    Console.WriteLine(discard.StringJoin(","));

    someOtherContext.Succeeded.Should().BeTrue();

}