硒:如何停止测试序列?

时间:2019-06-17 12:08:53

标签: c# visual-studio selenium if-statement

在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部分中输入的类似内容?

2 个答案:

答案 0 :(得分:1)

我认为您有两种选择。

1)仅仅抛出一个异常(并导致测试失败)

引发异常将使单元测试失败。有许多不同类型的异常,但是基数只是Exception。您可以检查可用的here不同类型的异常。尽可能尝试选择最能代表错误的异常(例如,错误的参数使用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

}

这会将测试标记为通过,但是意味着测试中的其余操作不会运行。但是,我会尽量不要这样做-除非您真的了解您为什么要这样做,否则您就可以开始通过测试,而不必知道测试通过的理由(即无需断言)

我希望对您有帮助

答案 1 :(得分:0)

如果您想尽早结束测试而不失败,只需使用return键即可。

PackageManagement\Install-Package : No match was found for the specified search criteria and module name 'CredentialManager'. Try Get-PSRepository to see all available registered module 
repositories.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 char:21
+ ...          $null = PackageManagement\Install-Package @PSBoundParameters
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

我通常会合理地这样做,因为某些条件可能需要其他主张,而其他条件可能不会。引发异常将使测试失败。这不会失败。

编辑:我只是注意到另一个回答者在回答的结尾提到了这一点。所以不要理我:)