微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

忽略跳过NUnit测试用例而不会引发异常

如何解决忽略跳过NUnit测试用例而不会引发异常

我需要在该月的某些时间运行一个测试用例,我想在适用时忽略或跳过相关的测试。到目前为止,我发现唯一有意义的属性Assert.Ignore();。不幸的是,触发此方法将引发IgnoreException ,因此将不会触发NUnit TearDown。这不是理想的选择,因为我有要在每个测试用例 之后都执行的代码 我的输入不正确假设,请在下面找到评论...

在理想的世界中,我希望我可以仅在代码的“忽略/跳过”部分设置测试结果,例如:

else
{
    //it's after the 25th of the month let's skip this test case
    TestContext.CurrentContext.Result.Outcome == ResultState.Ignored;
}

但是我知道TestContext.CurrentContext.Result.Outcome只是一个Get,这是有充分的理由的,它很可能会打开一罐蠕虫,让人们在不应该通过测试的情况下将测试设置为通过。

[Test]
[TestCase(TestName = "Test A")]
[Description("Test A will be testing something.")]
[Category("Regression Test Pack")]
public void Test_Case_1()
{
    sessionVariables = new Session().SetupSession(uiTestCase: true);

    if (DateTime.Now.Day <= 25)
    {
        //let's test something!
    }
    else
    {
        //it's after the 25th of the month let's skip this test case
        Assert.Ignore();
    }
}

[TearDown]
public void Cleanup()
{
    sessionVariables.TeardownLogic(sessionVariables);
}

解决方法

如您所发现的,使用Assert.Ignore不会导致删除操作被跳过。 (如果确实如此,那将是一个NUnit错误,因为如果已运行安装程序,则必须始终运行拆卸程序)

因此,您如何选择结束测试取决于您希望如何显示结果...

  • 仅返回即可导致测试通过,而没有任何特殊消息。

  • Assert.Pass做同样的事情,但是允许您包含一条消息。

  • Assert.Ignore发出“忽略”警告,并允许您指定原因。警告会传播,因此整个运行的结果也是“警告”。

  • Assert.Inconclusive给出一个“不确定”的结果,这意味着由于某些外部因素,该测试无法运行。您也可以指定具体原因,并且总体运行结果不受影响。

  • 作为Assert.Inconclusive的替代方法,可以将Assume.That与适当的测试结合使用。例如,以下代码将在每月25号之后触发“不确定”结果:

    Assume.That(DateTime.Now.Day <= 25);

就其价值而言,“不确定”结果正是针对这种情况。这意味着该测试由于其无法控制的原因而无法运行。尽管许多人以不同的方式使用“忽略”的结果,但该结果仍应视为团队最终要解决的问题。

从NUnit的设计角度来看,Assume.That是产生结果的最自然的方法。通常,您可以将其放置在测试的开头或SetUp方法的前面,然后放置在任何其他代码之前。

,

您可以只return而不是进行断言。

public void Test_Case_1()
{
    sessionVariables = new Session().SetupSession(uiTestCase: true);

    if (DateTime.Now.Day <= 25)
    {
        //let's test something!
    }
    else
    {
        //it's after the 25th of the month let's skip this test case
        return;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?