2012-05-28 45 views
1

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

所以代码递归遍历领域保持测试用例和CUT相同,目前正在复制,这是防干烧。所以,我有两个问题:

1)有你在你的项目中碰到过这样的情况呢?如果是,你是否应用DRY,还是让这种重复保持原样?

2)如果我在一个实用程序,方法把这个共同的代码,我需要编写测试用例来测试,这将再次涉及穿越域递归。那么如何解决这个问题而不会增加任何重复?

回答

4

你刚才打ugly mirror testing anti-pattern。如果你的CUT有一个bug,那么很可能你会将它复制到你的测试用例中,从本质上验证了bug仍然存在。

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

+0

我在这里显示了类似的代码:http://stackoverflow.com/questions/10749946/java-using-command-pattern-in-the-following-code我正在处理的对象很大,所以编写一个非递归JUnit测试它们会变得相当长。也许这是测试它的唯一方法。你说的在测试和CUT中有相同的错误是正确的。我用同样的代码烧了我的手指。 – shrini1000

+0

@ shrini1000:看你的代码:**是**,创建一些样本对象并手动执行所有的断言。这**是正确的方式。 –

1

使用访问者模式抽象遍历树,然后生成来访的测试用例,并在您的生产代码。并分别测试Visitor基础设施。