我应该为每个断言创建一个新的测试方法吗?

rye*_*guy 5 tdd unit-testing

我知道这是主观的,但我想遵循最常见的做法.您是否通常为每个类方法创建一个测试方法并用多个断言填充它,或者您是否为每个断言创建一个测试方法?

例如,如果我正在测试银行帐户的withdraw方法,并且我想确保如果用户试图透支帐户或撤回负数,则抛出异常,我应该创建testOverdawtestNegativeWithdrawal,或者我只是将这两个断言组合在一起一个叫做的方法testWithdraw

Mar*_*ham 10

可以这样考虑:每个测试都应该独立运行并运用一组相对独立的功能.如果你想断言关于你创建的某个方法的三个方面是否正确,那么你应该创建一个包含这三个方面的测试.

因此,我必须强烈反对已经回答的其他人.任意限制自己每次测试一个断言对你没有任何作用,除非让你的测试变得笨拙乏味.最终它可能会让你完全放弃测试 - 这肯定是一种耻辱:对你的项目和职业生涯不利.

现在,这并不能意味着你必须证上写大,笨重或多用途测试例程.实际上,我认为我从来没有写过超过20行左右.

至于知道哪个断言在一个函数中有多个时失败,你会注意到当断言失败时,nUnit和MSTest都会给你一个描述和一个链接,这会把你带到违规行(nUnit需要集成TestDriven.net等工具.这使得找出失败点变得微不足道.两者都将在函数中的第一次失败时停止,并且两者都使您能够进行调试演练.

  • 好问题.首先,请记住测试中的所有断言都应该是相关的.如果一个失败,它可能会对其他人产生影响.因此,无论如何,在确定其他人之前,我必须先解决第一个问题.其次,在我的工作作风中,失败的测试是立即修复的原因.所以我不会真的担心其他两个,直到我得到第一个修复.也就是说,我将在紧密循环中修复和测试该函数,直到验证所有功能.所以,如果其他人失败了,我可以通过修复第一个来修复它们.如果他们没有失败,重新测试将立即告诉我. (2认同)