在NUnit中在AfterTest中断言是否好?

时间:2015-07-16 17:30:55

标签: nunit

我们有一个基于NUnit的测试框架,我们使用ITestAction。我们有几个实现此接口的测试属性。 ITestAction接口实现BeforeTest和AfterTest。出于某种原因,我们有一些AfterTest实现断言一些东西,因此它们可能会抛出阻止其他属性被调用的其他AfterTest方法。因此,这就产生了一个问题。

我的问题是:让AfterTest断言是一个好主意吗?

我是否可以强制NUnit执行所有AfterTest,即使其中一些会抛出?

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:1)

不,这不是一个好主意。应该在运行测试之前使用这些方法进行设置,并在测试运行后进行清理。保持你的断言在测试中。

来自 nunit.org 关于操作属性:

  
      
  • 操作属性是NUnit的一项功能,旨在更好地实现测试逻辑的可组合性。
  •   
  • 操作属性允许用户创建自定义属性以封装在运行任何测试之前或之后使用的特定操作。
  •   

正如引言中所述,action属性的目的是为您定义一些自定义设置或拆卸逻辑,可以与您在其他设置中定义的其他设置或拆卸逻辑相结合动作属性。

这些属性应独立于实际测试,否则您将在action属性和测试之间创建依赖关系。这打破了构图设计,而不是动作属性的目的。

单元测试的定义:

  

单元测试是一段自动化的代码,它调用系统中的一个工作单元,然后检查有关该工作单元行为的单一假设。

     

Roy Osherove

从这个定义我们看到断言是单元测试本身的核心部分,应该保留在测试内(不在外面)。它需要独立。

答案 1 :(得分:0)

您的问题可能是您正在为套件运行断言(例如,在类/程序集级别),而不仅仅是针对单个测试方法。

您可能需要将断言包含在 if (!test.IsSuite) { ... } 中。

一般来说,在 AfterTest 中断言是可以的。 NUnit 中的 AfterTestActionCommand 专门处理 AfterTest 中进行断言的情况。