假设我们使用类似xUnit的框架来测试一个类,这样就为被测试类创建了一个测试类。现在,单独的测试方法应该测试多少?
在测试方法和测试方法之间是否应该存在一对一的映射:
class TestMath {
testSqrt() {
assertEquals(Math.sqrt(4), 2);
assertException(Math.sqrt(-2));
}
}还是每个“场景”都有一个测试方法比较好:
class TestMath {
testSqrtOfPositiveNum() {
assertEquals(Math.sqrt(4), 2);
}
testSqrtOfNegativeNum() {
assertException(Math.sqrt(-2));
}
}哪种方法更好,两种方法的优缺点是什么?
发布于 2013-03-20 21:19:04
第二种方法更好。如果其中一个测试失败,您将立即知道问题所在。如果您的测试方法检查了许多条件,如果其中一个条件失败了,您将不得不挖掘它来找出问题所在。
发布于 2013-03-20 20:22:34
就我个人而言,我更喜欢场景方法,它更类似于代码的使用方式,也不太可能破坏一些底层代码工作方式的改变。
发布于 2013-03-20 21:30:50
一般规则是每个测试都有一个断言。
至于你应该测试的水平。我喜欢将核心逻辑提取到逻辑引擎中,这些引擎可以使用低级别的方法级单元测试进行测试。但也有更高级别的测试运行在场景级别上。这样,高级别测试就能反映整个系统的功能,而低级别测试则确保所有路径都被正确测试。当某物破裂时,你可以看到它是在哪里破碎的,但也能看到它是如何在更高层次上显现的。
在你的例子中,我肯定会把它分成两个测试,这样你就可以准确地看到什么已经坏了,而不是仅仅知道什么东西坏了。
https://softwareengineering.stackexchange.com/questions/191336
复制相似问题