我一直在编写代码,通过修改对象的某些字段的值来处理这些字段。为了测试它,我首先编写了一个JUnit测试用例,它递归地遍历对象的字段,并确保它们被正确修改。CUT (被测类)做了一些不同的事情:它递归地遍历对象的字段,并根据需要修改它们。
因此,递归遍历字段的代码在测试用例和CUT中保持不变,并且当前是重复的,这与DRY相反。所以我有两个问题:
1)您在项目中遇到过这样的情况吗?如果是,您是否应用了DRY,或者让这样的复制保持原样?
2)如果我将这个通用代码放在一个util方法中,我将需要编写一个测试用例来测试它,这将再次涉及到递归遍历字段。那么如何才能在不添加任何重复的情况下解决这个问题呢?
发布于 2012-05-28 15:50:46
您刚刚命中了ugly mirror testing anti-pattern。如果您的CUT有bug,您很可能会将其复制到您的测试用例中,实质上是验证bug是否仍然存在。
你必须向我们展示更多的代码,但基本上你的测试用例应该简单得多,没有for
循环,没有条件-只有断言。如果您的产品代码在复杂的数据结构上执行一些奇特的遍历、反射等操作,那么可以创建一个测试Java对象,并在单元测试中手动测试每个字段。
发布于 2012-05-28 15:49:44
使用访问者模式来抽象遍历树,然后在测试用例和您的生产代码中构建访问者。并单独测试访问者基础设施。
https://stackoverflow.com/questions/10781050
复制相似问题