为通用类编写Unittest ...最好的方法?

时间:2009-10-14 14:15:55

标签: java generics junit

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

谢谢Patrick

3 个答案:

答案 0 :(得分:4)

您正在测试的类是否根据其类型以任何特殊方式处理其包含的元素?如果它将String和Integer的实例视为相同,那么你只需用String测试一次,并假设Integer可以正常工作。

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

答案 1 :(得分:2)

我同意Max A.你需要测试预期的行为。如果泛型类对于不同的参数化类型的行为不同,那么您需要对其进行测试。否则,使用一种类型进行测试就足够了。

此外,如果要断言可以为任何类型实例化泛型类,您可能希望编写一个实例化Object类的测试。这将是一个有点奇怪的测试,如果它编译它“通过”,但如果你将测试作为系统预期行为的回归(你应该),那么这个测试将防止有人改变泛型类进行参数化与<T extends YYY>

答案 2 :(得分:0)

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

话虽如此,我必须回应一下这个问题,即问题的根本情况非常奇怪。 JDK有很多列表实现,为此目的编写一个类非常奇怪。