有没有一种方法可以自动化Junit Bean属性测试?

7

让我们面对现实,编写bean属性测试可能是最浪费时间的事情。但这些测试必须要做。

例如,如果要测试一个名为propNameString属性,可以使用以下调用:

testProperty(target, "propName", String.class);
testProperty(target, "propName", String.class, "expected initial");

需要验证以下内容:

  • 存在getset方法。
  • 如果使用预期值,则测试get调用assertEquals以获取给定值。
  • getisset方法的行为符合预期。

我可以开始编写这些实现,但我想知道是否有可用的工具来简化此过程。其他可选属性可用于验证字段是否允许为空或使用JSR-303 bean验证验证字段。


1
在我看来,应该避免这种类型的测试。它会产生比回报更多的工作量,更不用说需要维护的大量测试了。 - Paul Morie
1
我完全同意你们两个的观点。就我个人而言,我从不手动创建getter/setter,而是依赖于NetBeans来创建它们。每当我修改它们时,我会删除之前的getter/setter,并从字段中重新生成它们。但是,这样做对代码覆盖率有什么影响呢? - Brett Ryan
@d33j,在我看来不是这样的。你是否曾经因为setter设置参数而不是实例变量而出现了错误?我经常看到这种情况,方法可能没问题,但实例变量有拼写错误,setter中没有明确的this.。我相信还有更多类似的例子。 - Brett Ryan
代码覆盖率怎么样?开发的目标不是100%的覆盖率。而且如果它在其他测试中没有被使用,为什么要保留它呢?一个选择是Project Lombok。不写getter/setter,就没有需要测试的东西了。 - Michael Lloyd Lee mlk
许多业务实体 bean 仅由服务方法用于填充这些 bean。需要测试以确保它们从模拟服务中正确返回,但实际上这只是测试实体属性是否正常工作。能够在不编写费力且容易出错的测试的情况下测试这些内容是有益的。 - Brett Ryan
显示剩余4条评论
4个回答

7

Javabean-tester 程序似乎写得和文档记录都不太好。 - Lii

0

如果你想手动完成,我可以考虑使用反射。

或者你可以参考这个答案来使用commons:

关于getter和setter的JUnit测试方法,请参考junit test method for getters & setters


0
创建另一个bean,使其看起来与您测试的bean相同。然后使用apache-commons、festAssert、hamcrest或任何其他可以使用反射进行比较的框架。不要自己编写,我相信已经有人做过了。

0

更新上述的JavaBean测试器

有一个活跃的分支项目与上述提到的(但已经失效)codebox / javabean-tester,它看起来相当不错...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接