【问题标题】:Writing Unittest for generic classes... best approach?为通用类编写单元测试......最好的方法?
【发布时间】:2009-10-14 14:15:55
【问题描述】:

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

谢谢帕特里克

【问题讨论】:

  • 好吧,我来咬一口……你的同事为什么要重新发明列表轮?我只是好奇。
  • 更重要的是,如果需要进行单元测试,为什么同事没有立即编写代码?

标签: java generics junit


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢有用的提示! :-)
    【解决方案3】:

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

    话虽如此,我不得不回应 cmets 问题的基本情况非​​常奇怪。 JDK有很多列表实现,为此编写一个类是很奇怪的。

    【讨论】:

    • 列表有一些功能可以撤销更改。他需要这个项目。我为什么要为它编写测试?我的同事们从来没有使用过它(他们鄙视这种巫术;-))而且我(公司的新人)已经研究了更多的话题。所以我的老板告诉我通过编写单元测试来支持我的同事的项目。它还应该向他们展示使用像 Junit 这样的框架的好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多