C# 硒:如何停止测试序列?
在VisualStudio中使用Selenium。使用NUnit对我的测试用例进行排序 我正在编写一个测试用例,将两个序列号与一个if语句进行比较,如下所示:C# 硒:如何停止测试序列?,c#,visual-studio,selenium,if-statement,C#,Visual Studio,Selenium,If Statement,在VisualStudio中使用Selenium。使用NUnit对我的测试用例进行排序 我正在编写一个测试用例,将两个序列号与一个if语句进行比较,如下所示: [Test] public void CompareVariables() { if (string.Equals(serialNumberInfo, serialNumberReport)) Console.WriteLine($"{serialNumberInfo} and {serialNumberReport}
[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!
[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.
}
如果序列号不匹配,我希望能够中止testsequence的其余部分
是否有一种“结束/停止测试”方法或类似的方法可以放在
的其他部分中?我想您有两种选择
1) 只需抛出一个异常(并使测试失败)
引发异常将使单元测试失败。有不同类型的异常负载,但基本类型只是Exception
。您可以检查可用的不同类型的异常。在可能的情况下,尝试选择最能代表错误的异常(例如,坏参数使用ArgumentException
或其派生)
您的测试将如下所示:
[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!
[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.
}
这已经完成了,但是有无数的断言框架,所以选择你最喜欢的。(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
}
这会将测试标记为通过,但意味着测试中的其余操作不会运行。然而,我会尽量不这样做——除非你真正理解为什么你想要这样做,因为你可以在不知道为什么通过测试的情况下开始通过测试(也就是说,不断言任何事情)
我希望这有助于如果您希望尽早结束测试而不失败,只需使用return即可
[Test]
public void MyTest() {
//Do some stuff
if(!shouldContinue) {
return;
}
}
我经常这样做,因为某些条件可能需要额外的断言,而其他条件可能不需要。抛出异常将使测试失败。这不会使它失败
编辑:我刚刚注意到另一个回复者在他们的答案末尾提到了这一点。所以别理我:)你说的中止是什么意思?你的意思是停止它当前正在做的事情并报告失败/通过吗?是的!停止测试用例,就像VisualStudio在无法继续测试用例时通常所做的那样。那么您是否可以简单地抛出一个异常?这将导致测试失败并中止测试用例我不熟悉抛出异常。如何编写一个?@jamiepock我可以使用这个:抛出新的System.ArgumentException(“序列号不匹配”)