1

我一直在编写通过修改对象的值来处理对象的某些字段的代码。为了测试它,我首先编写了一个 JUnit 测试用例,它递归地遍历对象的字段并确保它们被正确修改。CUT(被测类)做了类似的事情:它递归地遍历对象的字段并根据需要修改它们。

因此,递归遍历字段的代码在测试用例和 CUT 中保持不变,并且当前是重复的,这违反了 DRY。所以我有两个问题:

1)你在项目中遇到过这样的情况吗?如果是,您是否应用了 DRY,或者让此类重复保持原样?

2)如果我把这个通用代码放在一个 util 方法中,我需要编写一个测试用例来测试它,这将再次涉及递归遍历字段。那么如何在不添加任何重复的情况下解决这个问题呢?

4

2 回答 2

4

您刚刚遇到了丑陋的镜子测试反模式。如果您的 CUT 有错误,您很可能会将其复制到您的测试用例中,本质上是验证错误是否仍然存在。

您必须向我们展示更多代码,但基本上您的测试用例应该更简单,没有for循环,没有条件 - 只是断言。如果您的生产代码对复杂的数据结构进行了一些花哨的遍历、反射等 - 创建一个测试 Java 对象并在单元测试中手动测试每个字段。

于 2012-05-28T07:50:45.707 回答
1

使用访问者模式抽象遍历树,然后在测试用例和生产代码中构建访问者。并单独测试访客基础设施。

于 2012-05-28T07:49:44.037 回答