0

在 Visual Studio 中使用 Selenium。使用 NUnit 对我的测试用例进行排序。

我正在编写一个测试用例,将两个序列号与这样的 if 语句进行比较:

[Test]
public void CompareVariables()
{
   if (string.Equals(serialNumberInfo, serialNumberReport))
      Console.WriteLine($"{serialNumberInfo} and {serialNumberReport} are a match! Proceed!");
   else
      Console.WriteLine($"{serialNumberInfo} and {serialNumberReport} don't match! Cancel test!");
      //method for stopping test missing!

如果序列号不匹配,我希望能够中止其余的测试序列。

是否有“结束/停止测试”方法或类似的方法可以放在else部分中?

4

2 回答 2

1

我认为你有几个选择。

1)简单地抛出一个异常(并且测试失败)

抛出异常将使单元测试失败。有很多不同类型的异常,但基础很简单Exception。您可以在此处查看可用的不同类型的异常。在可能的情况下,尝试选择最能代表错误的异常(例如使用错误的参数ArgumentException或其中的一些派生词)。

您的测试将如下所示:

[Test]
public void CompareVariables()
{
   if (!string.Equals(serialNumberInfo, serialNumberReport))
      throw new Exception($"{serialNumberInfo} and {serialNumberReport} don't match! Cancel test!");

   // The rest of your tests (only run if serialNumberInfo and serialNumberReport) are equal.
}

2)使用断言(并通过测试)

单元测试通常应该断言发生了一些令人满意的事情。如果那件事没有发生,那么应该抛出一个异常(通常由一些断言框架为您处理)。

所以你可以翻转测试来做到这一点:

[Test]
public void CompareVariables()
{
   serialNumberInfo.ShouldBe(serialNumberReport);

   // The rest of your tests (only run if serialNumberInfo and serialNumberReport) are equal.
}

这是用Shouldly完成的,但是有无数的断言框架,所以选择你最喜欢的。(mstest 内置了一个,但我发现它的可读性较差,但这是个人喜好)。

请注意,仅当您想明确确保它应该发生时才使用断言。即这需要我的测试通过,而不是如果发生这种情况然后中止。这很难解释,所以我希望这是有道理的?

出错时的例外情况,本应正确时的断言。

3)离开测试(并通过测试)

如果测试退出而没有抛出异常(手动或通过断言框架),则该测试被认为是通过测试。因此,如果您想将此视为通过,您可以简单地从测试中返回。

[Test]
public void CompareVariables()
{
   if (string.Equals(serialNumberInfo, serialNumberReport))
   {
      Console.WriteLine($"{serialNumberInfo} and {serialNumberReport} are a match! Proceed!");
   }
   else
   {
        Console.WriteLine($"{serialNumberInfo} and {serialNumberReport} don't match! Cancel test!");
        return;
   }

   // The rest of your tests

}

这会将测试标记为通过,但意味着测试中的其余操作不会运行。但是,我会尽量不这样做——除非你真的明白你为什么要这样做,因为你可以在不知道它们为什么通过的情况下开始通过测试(即不断言任何东西)

我希望这会有所帮助

于 2019-06-17T13:09:02.317 回答
0

如果您想提前结束测试而不失败,只需使用 return。

[Test]
public void MyTest() {

    //Do some stuff
    if(!shouldContinue) {

        return;

    }

}

我这样做是合理的,因为某些条件可能需要额外的断言,而其他条件可能不会。抛出异常将使测试失败。这不会失败。

编辑:我刚刚注意到其他响应者在他们的回答结束时提到了这一点。所以忽略我:)

于 2019-06-17T17:05:39.200 回答