Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 单元测试是一种具有多种可能结果的方法_Unit Testing - Fatal编程技术网

Unit testing 单元测试是一种具有多种可能结果的方法

Unit testing 单元测试是一种具有多种可能结果的方法,unit-testing,Unit Testing,我构建了一个简单的~ish方法,它由大约5个部分组成URL:基址、端口、路径、“操作”和一组参数。其中,只有地址部分是强制性的,其他部分都是可选的。对于输入参数的每个排列,必须从方法中产生有效的URL,例如: 地址 地址端口 地址端口路径 地址路径 地址操作 地址路径操作 地址端口操作 地址端口路径操作 地址操作参数 地址路径操作参数 地址端口操作参数 地址端口路径操作参数 索福斯。基本方法是为每个可能的结果编写一个单元测试,每个单元测试将地址和任何可选参数传递给方法,并根据预期输出测试结果

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

  • 地址
  • 地址端口
  • 地址端口路径
  • 地址路径
  • 地址操作
  • 地址路径操作
  • 地址端口操作
  • 地址端口路径操作
  • 地址操作参数
  • 地址路径操作参数
  • 地址端口操作参数
  • 地址端口路径操作参数
索福斯。基本方法是为每个可能的结果编写一个单元测试,每个单元测试将地址和任何可选参数传递给方法,并根据预期输出测试结果

然而,我想知道,有没有更好的(tm)方法来处理这种情况?有没有(好的)单元测试模式

(咆哮)我现在才意识到,几年前我就学会了编写单元测试,但从未真正(感觉)在这一领域取得过进步,而且每个单元测试都是构建参数、预期结果、填充模拟对象、调用方法以及根据预期结果测试结果的重复。我很确定这是单元测试的一种方式,但它有点乏味,yanno。关于那件事的建议总是受欢迎的。(/兰特)


(注意)圣诞节周末即将来临,可能要到下周才会回复建议。(/note)

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

[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)是该作业的正确工具

当然,您需要确定参数数组的索引处的参数值。我将它设置为一个
对象[]
,因为我假设不同的参数也有不同的数据类型,而且我们无法从一开始就确定正确的顺序,那么您必须自己找到它,尽管使用多态性。

我使用的是JUnit,它(通过谷歌搜索)证明具有参数化的测试单元。。。不过,它的语法没有NUnit的漂亮,请参见。