我使用NUnit 3.0 来运行测试。
我的问题是下一个:我有测试类,在这个类的构造函数中有一个方法在所有测试之前运行(因为它在构造函数中)。在执行此方法时,会发生错误,然后使用CleanUp
方法处理它。在CleanUp
方法中,我使用TestContext.CurrentContext.Result.Outcome.Status
属性来查看我运行的测试的状态。
事情就是测试根本没有运行(因为前置条件方法失败了)。那么为什么这个属性告诉我测试通过了呢?
以下是我的代码:
public class DepositSuccessTests
{
//attributes
public DepositSuccessTests(string device, WayToPay merchant)
{
SetUp();
try
{
Deposit_Money(merchant); // this method invokes an exception
}
catch (Exception e)
{
CleanUp();
}
}
[Test]
//Test that I run but that is not executed because of exception in the constructor
public void Check_Transaction_Merchant_In_Transactions()
{
_orderVerifications.CheckTransactionMerchantInTransactions_Back(_merchant);
}
[TearDown]
public void CleanUp()
{
//In the next line my test result is "Passed"
if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)
{
//Do something
}
_driver.Dispose();
}
}
答案 0 :(得分:2)
即使行Deposit_Money(merchant);
引起了异常,你也抓住了它,所以就跑步者而言,没有任何问题,所有代码都没有错误。你知道有问题,我知道有问题,但跑步者没有。
如果你在catch中明确失败,那么它会将其标记为不通过。
try
{
Deposit_Money(merchant); // this method invokes an exception
}
catch (Exception e)
{
Assert.Fail(); /// Explicitly fail the test
CleanUp();
}
答案 1 :(得分:0)
你需要允许在测试中抛出异常,严格来说,你的测试确实已经过去了。
删除测试中的错误检查,允许抛出异常,并且您应该将测试结果视为失败。