2009-10-14 111 views
2

我应该为另一位同事编写的代码编写项目的单元测试。他创建了一个通用列表类。现在我正在思考,为班级创建单元测试以及如何避免重复代码的最佳方式。 List类可以通过String,Integer和其他一些类型实例化。我怎样才能避免为每个类型编写一个测试类,而是为每个数据类型使用一个测试类?为泛型类写单元测试...最佳方法?

感谢帕特里克

+1

好吧我会咬...你的同事为什么重新创建列表轮?我只是好奇。 – cletus 2009-10-14 14:20:38

+1

更重要的是,如果需要进行单元测试,那么为什么同事没有把它们编码? – 2009-10-14 14:23:03

回答

4

请问你测试对待它包含的元素基于其类型的任何特殊的方式上课吗?如果它将String和Integer的实例视为相同,那么只需使用String对其进行一次测试即可,并假定Integer可以正常工作。

单元测试在很大程度上取决于预期的行为。

0

JUnit4有一个参数化的跑步者,它可以让你为所有不同的类型编写一个测试。这假设在不同类型之间没有实质性的行为差异,所以测试可以以相同的方式运用这个类。

这就是说,我不得不重复评论这个问题的基本情况是非常奇怪的。 JDK有很多列表实现,为此编写一个类是很奇怪的。

+0

列表有一些功能可以撤消更改。他需要这个项目。我为什么要为它编写测试?我的同事们从来没有与它合作过(他们鄙视这种巫术;-)),而我(公司里的新人)已经研究了一些话题。所以我的老板告诉我要通过编写单元测试来支持我的同事在他的项目中。它也应该向他们展示使用像Junit这样的框架的好处。 – Patrick 2009-10-14 14:44:55

2

我同意Max A.你需要测试预期的行为。如果泛型类对于不同的参数化类型表现不同,那么您需要测试它。否则,使用一种类型的测试应该足够。另外,如果要声明泛型类可以为任何类型实例化,则可能需要编写一个测试,以实例化Object的类。这是一个有点奇怪的测试,因为如果它将它编译为“通过”,但如果将测试保持为系统预期行为的回归(并且您应该),那么此测试将防止有人将泛型类更改为参数化与<T extends YYY>

+0

感谢您的有用提示! :-) – Patrick 2009-10-15 08:39:10

相关问题