我刚开始进行单元测试。假设我有一个过滤器类来过滤掉盒子。 Box
和BoxFilter
的定义如下:
class Box
{
double GetHeight()
double GetWidth()
double GetWeight()
}
class BoxFilter
{
void SetMaxHeight()
void SetMaxWidth()
void SetMaxWeight()
bool PassesFilter(Box box)
}
因此,如果一个框没有超过各种最大阈值,那么它会通过过滤器。
我的问题是为BoxFilter
类的PassesFilter
方法编写单元测试。
我可以在BoxFilter
方法中创建SetUp()
并保持BoxFilter设置不变
然后操纵每个测试中的Box
属性以验证它是通过还是失败。例如,
将最大高度,宽度和重量设置为10,然后将框属性调整到上方或下方
10并断言预期结果。
或者,我可以保持Box
设置不变
操纵BoxFilter
设置。
或者,我可以测试两种情况:BoxFilter
常量
并更改Box
和Box
常数和chaning BoxFilter
。
哪种方法可以对此进行单元测试 方法?我还想测试一系列值,而不仅仅是10?
答案 0 :(得分:2)
单元测试背后的想法是涵盖代码和用例。一般来说,你想要以尽可能简单和尽可能完整的方式做到这一点。
我的(个人)偏好是设置具有不同参数的多个BoxFilter
来测试具有正,零和负参数的过滤器。对于每个BoxFilter
,我会测试几个不同的Box
es,同时还有正,零和负参数,以确保您已捕获所有无效和边缘情况。然后我创建(至少)一个带有“普通”参数的BoxFilter
并测试各种Box
以确保正确的参数通过过滤器。
尽早考虑单元测试的荣誉!我想你会发现它使开发更快,更容易,更愉快。
答案 1 :(得分:1)
我认为这只是一个偏好问题,因为改变数值的方式实际上并不影响你正在测试的逻辑。每次调用PassesFilter()
时,只有框的当前值和过滤器事项 - 值相对于周围测试的变化方式无关紧要。另一方面,如果您正在测试实际处理大小随时间变化的代码,那么您应该测试两种方式。
最重要的是你测试了极端情况 - 但是你是否通过测试一个固定的过滤器例如8.0与7.99999,8.0和8.00001的盒子大小相反或者相反应该无关紧要(不过,个人而言,我会选择固定的过滤器和变化的盒子,因为常见的用例可能是创建一个过滤,然后通过它传递许多框。)