在单元测试中断言设置和前置条件

时间:2010-08-31 12:52:54

标签: unit-testing testing tdd

每次测试都有多个断言真的很难闻?我通常会尝试遵循“排列,行为,断言”模式以及每个测试指南的单个断言。我认为干净,小巧,孤立的测试是非常棒的。在大多数情况下,我设法做到这一点。然而,有时我发现自己在我的安排之后立即声称“先决条件”:

'arrange:
'pre-conditions:     
     Assert the arrange worked
'act:
'assert:

我的测试测试太多了吗?是否关心它不应该关心的事情?我很乐意听到一些意见。

3 个答案:

答案 0 :(得分:3)

正如我所说here,我认为也许我们的最佳实践应该是,而不是安排 - 行动 - 断言,而是安排 - 假设 - 行动 - 断言。在采取行动之前,我们断言行动的预期结果尚未生效。这不是与您要求的完全相同;一般来说,我认为验证设置并不重要,因为设置错误往往在任何情况下都非常“大声”地表现出来;但是在测试中有第二个断言是一个很好的理由。

答案 1 :(得分:1)

我认为必须使用Assert来验证设置是不理想的,因为它会使结果变得混乱(如果只是查看输出,可能很难弄清楚你正在测试什么)。

我认识到有时候这是必要的,或者你只是想确保所有内容都按照你想要的方式进行测试。

我的做法是使用Debug.Assert(在C#中),以便设置验证不会成为测试输出的一部分。

如果设置没有使系统进入预期状态,您可以通过抛出异常来实现其他语言相同。

不同的测试运行器可能会以不同的方式处理这种情况,因此您应该确保此方法具有所需的效果(测试失败,但只要Debug.Assert通过或没有抛出异常就没有额外的报告输出。)

答案 2 :(得分:1)

我不会使用香草“断言”,而是使用Assert.Inconclusive(MSTest)¹。测试没有失败,因此您不希望测试运行失败。

1)JUnit中的Assume和NUnit我相信。