我注意到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);
}
}
}
答案 0 :(得分:3)
测试结果以Inconclusive
开始。如果跳过或忽略了测试,则结果会更改,但当然永远不会执行。
如果执行,则结果为Inconclusive
,直到测试结束。显然,当您仍在执行测试时,测试尚未完成。拆解开始时,测试结果是已知的,因此根据测试方法本身是否成功而有所不同。当然,拆卸中的异常可能会将结果更改为“错误”状态。
最重要的是,当测试方法本身仍在运行时,“结果”字段将无用。无论如何,如果您正在执行test方法中的代码,则测试尚未失败。否则,您将不会继续执行!
您说您不能使用TearDown,但是您提供的链接不能解决访问测试结果的问题。您能进一步解释吗?检查测试结果后到底要做什么?
答案 1 :(得分:0)
您可以尝试将AssertionScope
与AssertionScope.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();
}