Visual Studio Selenium:如何停止测试序列?

ig9co6j1  于 2023-04-22  发布在  其他
关注(0)|答案(3)|浏览(122)

在Visual Studio中使用Selenium。使用NUnit对我的测试用例进行排序。
我正在编写一个测试用例,用一个if语句比较两个serialnumbers,如下所示:

[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节?

dgtucam1

dgtucam11#

我觉得你有几个选择。
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)使用Assert(并使测试失败)
单元测试通常被认为是Assert某些期望的事情发生了。如果那件事没有发生,那么应该抛出一个异常(通常由一些Assert框架为您处理)。
所以你可以翻转测试来做到这一点:

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

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

这是用Shouldly完成的,但有无数的Assert框架,所以选择你最喜欢的。(mstest有一个内置的,但我觉得它可读性不太好,但这是个人喜好)。
注意,只有当你想明确地确保它应该发生的时候才使用Assert。也就是说,这需要为真才能通过我的测试,而不是如果这发生了,然后中止。这很难解释,所以我希望这是有意义的?
当事情出错时的异常,当事情应该正确时的Assert。
3)离开测试(并通过测试)
如果测试退出时没有抛出异常(手动或通过Assert框架),那么测试被认为是通过测试。因此,如果你想把它当作通过,你可以简单地从测试中返回。

[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

}
这将标记测试为通过,但意味着测试中的其余操作不会运行。我会尽量不这样做-除非你真的明白为什么你想要这样做,因为你可以在不知道为什么他们通过的情况下开始通过测试(即不Assert任何东西)
希望这能帮上忙

bogh5gae

bogh5gae2#

如果你想尽早结束测试而不使其失败,只需使用return。

[Test]
public void MyTest() {

    //Do some stuff
    if(!shouldContinue) {

        return;

    }

}

我这样做是合理的,因为某些条件可能需要额外的Assert,而其他条件可能不需要。抛出异常将使测试失败。这不会使测试失败。
编辑:我刚注意到另一个回复者在他们的回答结束时提到了这一点。所以别理我:)

vjrehmav

vjrehmav3#

这是我的解决方案。我使用Assert.Fail()和一条消息。这停止了测试执行并记录了一条消息。
我使用C#和Selenium。

If (condition is true) 
{ // execute code }
else 
{ Assert.Fail("Condition was false."); } // stops test.

相关问题