在一次测试中检查几个不同的示例输入?

Ger*_*ton 23 tdd nunit unit-testing

假设我想编写一个用正则表达式验证电子邮件地址的函数.我写了一个小测试来检查我的功能并编写实际的功能.让它通过.

但是,我可以提出一些不同的方法来测试相同的功能(test@test.com; test234@test.com; test.test.com等).

我是否将所需的所有咒语都用几个ASSERTS进行相同的单一测试,或者为我能想到的每一件事写一个新的测试?

谢谢!

Pau*_*der 10

大多数测试框架现在支持某种基于数据的测试,以便您在多个数据集上运行相同的测试.

请参阅NUnit中的ValuesAttribute.

xUnit.net,MBUnit和其他人有类似的方法.


小智 8

通常我会创建许多不同的测试,并给每个测试自己的名称.例如,假设有3个不同的正则表达式{A,B和C}用于匹配电子邮件地址.该函数检查传入的电子邮件是否匹配,并接受找到的第一个匹配项.

我会进行以下测试.

  • ATypeEmailShouldMatchPatternA
  • BTypeEmailShouldMatchPatternB
  • CTypeEmailShouldMatchPatternC
  • BadEmailShouldNotMatchAnyPattern
  • EmailCompatibleWithPatternAAndPatternBShouldBeMatchedByA
  • EmailCompatibleWithPatternAAndCShouldBeMatchedByA
  • EmailCompatibleWithPatternBAndCShouldBeMatchedByB

通常我会在每个测试中放置一个断言.

但是,有时候,如果断言都检查同一个东西的不同部分,我会在测试中放置多个断言.例如,假设我有一个函数可以找到与模式A匹配的所有电子邮件.我的测试在电子邮件列表中提供,但只有一个匹配模式A.该函数返回一个列表,我希望该列表只有一个元素它.所以我会断言两件事:

  1. 该列表中包含一个元素.
  2. 一个元素是匹配模式A的电子邮件.