是否有可用的框架或库,当给定JavaBean时,将“完成它的步伐”,即测试所有的getter和setter,验证属性是否与getter和setter匹配等等?
就个人而言,我认为这不是测试中最困难的部分。通过反射可以做到,但这并不是让测试变得有价值的原因。
困难的部分是找出所有可能的输入,“快乐的路径”和错误的情况,确保异常被抛出,等等。
您的Java Bean应该实现equals和hashCode。我更担心检查等于合同的测试:null等于,自反,对称,传递,而不是等于。这些都不是微不足道的。
吸气剂和二传手是你遇到的最少的问题。当人们谈论70%或更高的代码覆盖率标准时,他们经常说可以省去吸气剂和制定者。
虽然我同意要解决更大的问题,但有些情况可以用来测试Java bean方法。从事大型代码库的大型团队可能会遇到问题。我见过几个复制/粘贴错误导致getter或setter处理错误属性的情况。忘记会导致hashCode和equals方法变得不一致。在这个简单的代码中查找错误可能非常令人沮丧。
Bean Matchers是一个可以在这方面提供帮助的图书馆。它提供了一系列Hamcrest匹配器,用于反射测试Java bean。例如:
@Test
public void testBean() {
assertThat(MyBean.class, allOf(
hasValidBeanConstructor(),
hasValidGettersAndSetters(),
hasValidBeanHashCode(),
hasValidBeanEquals(),
hasValidBeanToString()
));
}
如果你看起来不像http://commons.apache.org/validator/那样更像花哨,我会建议你自己写。就个人而言,我不喜欢没有任何行为的纯数据保持对象 - 它不是很好的设计。因此,如果我没有被迫使用这些对象(通过使用j2ee f。),我会试图摆脱它们。
您可以尝试使用http://oval.sourceforge.net/ Oval,它允许您在bean上使用注释,然后执行validate方法。它不完全符合JSR303标准。如果你想使用完全兼容的东西,你应该看看Hibernate Validator。
就像上面的帖子一样,肯定会查看apache commons验证器。
我想这个库是你问题的答案:http://outsidemybox.github.com/testUtils/
它测试所有bean的初始值,setter,getter,hashCode(),equals()和toString()。您所要做的就是定义默认和非默认属性/值的映射。
它还可以测试具有其他非默认构造函数的bean对象。