2013-04-26 155 views
1

在nunit测试中,我们可以断言,如果测试在某种情况下失败,那么它就是合格(即预期会尝试失败)。断言测试失败是成功的

但它应该在所有其他情况下通过。

事情是,测试可能会崩溃之前,它可以达到它的断言部分。

我的意思是在

[TestSetup] 
void init() 
{ 
    if (condition==true) 
    { 
    Assert.That(this test fails); /*any feature to do this?*/ 
    } 
} 
+0

我真的不明白。你是否在测试设置中声明了某些东西?也许试着把你真实的例子。 – gustavodidomenico 2013-04-26 16:38:55

回答

3

线的东西如果测试会失败,且它归类为在某些情况下的传球,这听起来不好的测试。用明确的方法名称将其分解为单个测试,详细说明它的实现。

因此,不是有一个测试,并有一个条件在里面,将它分成每个场景。这样,你可以有一个场景,在这种情况下,它应该失败,像

// do stuff 
bool success = DoStuff(); 
Assert.IsFalse(success); 
+0

同意。虽然你的答案是没有确切的一个我一直在寻找,我仍然觉得它比我所期待的更好。谢谢。 – dushyantp 2013-04-29 08:46:05

0

这有点难以理解你的问题。你是否想要Assert.Fail()强制失败?是这样的...

[TestSetup] 
public void Init() 
{ 
    if (condition==true) 
    { 
    Assert.Fail(); 
    } 
} 

相反,如果你想检查失败,而不是原因一个,你应该遵循雅兰的意见,并检查你正在验证开展工作的具体事实 - 如方法的返回值。

+0

我一直在寻找像声称它失败并不会导致失败的事情。无论如何,我认为我的行动计划是基于一个摇摇欲坠的基础和可能雅兰的建议(查看以上的ANS)是最好的。谢谢。 – dushyantp 2013-04-29 08:47:31

0

您还可以使用“Action”对象调用操作中的代码,并在该操作为异常时测试该操作。看FluentAssertions他们有很多例子。

int number1 = 1; 
    int number0 = 0; 
    Action someAction =() => { int j = number1/number0; }; 
    someAction.ShouldThrow<DivideByZeroException>();