单元测试具有许多可能结果的方法

时间:2010-12-24 13:50:05

标签: unit-testing

我构建了一个简单的~is方法,它构造了大约5个部分的URL:基地址,端口,路径,“动作”和一组参数。其中,只有地址部分是强制性的,其他部分都是可选的。对于输入参数的每个排列,必须有一个有效的URL,例如:

  • 地址
  • 地址端口
  • 地址端口路径
  • 地址路径
  • 地址行动
  • 地址路径操作
  • 地址端口操作
  • 地址端口路径操作
  • 地址行动参数
  • 地址路径行动参数
  • 地址端口操作参数
  • 地址端口路径操作参数

andsoforth。对此的基本方法是为每个可能的结果编写一个单元测试,每个单元测试将地址和任何可选参数传递给方法,并根据预期输出测试结果。

然而,我想知道,有更好的(tm)方法来处理这样的案例吗?这有什么(好的)单元测试模式吗?

(咆哮)我现在才意识到我几年前已经学会了编写单元测试,但从来没有真正(感觉)我在该领域取得了进步,并且每个单元测试都是建筑参数的重复,预期结果,填充模拟对象,调用方法并根据预期结果测试结果。我很确定这是进行单元测试的方法,但它有点乏味,yanno。关于这个问题的建议总是受欢迎的。 (/咆哮)

(注)圣诞周末即将到来,可能不会在下周回复建议。 (/注释)

1 个答案:

答案 0 :(得分:2)

由于您通常只期望一个独特的结果,无论给出参数的顺序如何,我建议对所有可能性进行一次测试。在我的代码示例中,我使用了NUnit Testing Framework,因此您可以了解如何使用测试框架进行等效测试。

[TestCase("http://www.url.com")]
[TestCase("http://www.url.com", 21)]
[TestCase("http://www.url.com", 24, @"c:\path")]
public void TestingMethod(string address, params object[] address) {
    // Do your tests accordingly here...
}

所以,TestCaseAttribute(使用NUnit)是这项工作的正确工具。

当然,您需要确定参数数组的索引是什么参数值。我把它设为object[],因为我认为不同的参数也有不同的数据类型,因为我们无法从开始确定正确的顺序,所以你必须自己找到它,尽管使用多态性。