单元测试双方的操作?

时间:2011-07-17 00:40:42

标签: unit-testing

我刚开始进行单元测试。假设我有一个过滤器类来过滤掉盒子。 BoxBoxFilter的定义如下:

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常量 并更改BoxBox常数和chaning BoxFilter

哪种方法可以对此进行单元测试 方法?我还想测试一系列值,而不仅仅是10?

2 个答案:

答案 0 :(得分:2)

单元测试背后的想法是涵盖代码和用例。一般来说,你想要以尽可能简单和尽可能完整的方式做到这一点。

我的(个人)偏好是设置具有不同参数的多个BoxFilter来测试具有正,零和负参数的过滤器。对于每个BoxFilter,我会测试几个不同的Box es,同时还有正,零和负参数,以确保您已捕获所有无效和边缘情况。然后我创建(至少)一个带有“普通”参数的BoxFilter并测试各种Box以确保正确的参数通过过滤器。

尽早考虑单元测试的荣誉!我想你会发现它使开发更快,更容易,更愉快。

答案 1 :(得分:1)

我认为这只是一个偏好问题,因为改变数值的方式实际上并不影响你正在测试的逻辑。每次调用PassesFilter()时,只有框的当前值和过滤器事项 - 值相对于周围测试的变化方式无关紧要。另一方面,如果您正在测试实际处理大小随时间变化的代码,那么您应该测试两种方式。

最重要的是你测试了极端情况 - 但是你是否通过测试一个固定的过滤器例如8.0与7.99999,8.0和8.00001的盒子大小相反或者相反应该无关紧要(不过,个人而言,我会选择固定的过滤器和变化的盒子,因为常见的用例可能是创建一个过滤,然后通过它传递许多框。)