2010-07-20 127 views
4

有没有一个框架或库可用,当给定一个JavaBean时,它将“通过它的步伐”,即测试所有getter和setter,验证属性是否与getter和setter匹配等。?Java bean测试框架

+0

你可以通过反射 – hvgotcodes 2010-07-20 22:42:40

+1

如果有与您的getter和setter和莫名其妙的问题你的其他(实际)测试不暴露他们(即不合格)再有,其余的问题,滚你自己你的测试套件 – 2010-07-21 00:21:43

+0

@mattb:有效点 – 2010-07-21 20:26:50

回答

8

就我个人而言,我认为这不是测试中最困难的部分。通过反思可以做到这一点,但这并不能使测试成为可能。

难的是找出所有可能的输入,对于“幸福路径”和错误的情况下,制作,确保异常抛出时,他们应该是等

你的Java Bean应实现equals和hashCode 。我更担心测试来检查等价合约:空等于,反身,对称,传递,而不是等于。这些都不是微不足道的。

吸气剂和固定器是你的问题中最少的。当人们谈论70%或更高的代码覆盖率标准时,他们经常说可以忽略getter和setter。

+0

同意这不是最难的部分;只是很乏味。我曾为一家撰写了一个bean测试框架的组织工作,以便获取代码覆盖率数字。 – 2010-07-21 20:25:31

+1

我认为这是一个错误的措施。高覆盖率并不意味着良好的测试。像CRAP4J这样的东西可能是一个更好的指标。 – duffymo 2010-07-21 21:14:59

1

如果你不喜欢像http://commons.apache.org/validator/更喜欢的东西,我会建议你自己写。就个人而言,我不喜欢纯粹的数据保存对象没有任何行为 - 这不是很好的设计。所以如果我没有被迫使用这些对象(通过与j2ee工作),我试图摆脱它们。

2

看看反射测试工具:

http://code.google.com/p/rtu/

但如果你正在测试生成的方法(基于类的字段),可能不值得。

+0

这看起来很有希望。谢谢! – 2010-07-21 20:29:20

+0

投票答案是好的:) – Jon 2010-07-21 21:37:23

1

你可以试试http://oval.sourceforge.net/椭圆它允许你在你的bean上使用注释,然后执行一个验证方法。它不完全符合JSR303。如果你想使用完全兼容的东西,你应该检查出Hibernate验证器。

像上面的状态绝对检查出Apache的公共验证。

0

我想这个库是回答你的问题: http://outsidemybox.github.com/testUtils/

它测试bean的所有初始值的制定者,吸气剂,hashCode()方法,equals()方法和toString()。 您只需定义默认和非默认属性/值的映射。

它也可以用附加的非默认构造函数测试bean的对象。

4

虽然我同意有更大的问题需要解决,但有些情况下用于测试Java bean方法。处理大型代码库的大型团队可能会遇到问题。我已经看到了一些复制/粘贴错误的情况,导致getter或setter在错误的属性上工作。健忘可能会导致hashCode和equals方法变得不一致。在这个简单的代码中查找错误可能非常令人沮丧。

Bean Matchers是一个库,可以在这方面提供帮助。它提供了一系列用于反射测试Java bean的Hamcrest匹配器。例如:

@Test 
public void testBean() { 
    assertThat(MyBean.class, allOf(
      hasValidBeanConstructor(), 
      hasValidGettersAndSetters(), 
      hasValidBeanHashCode(), 
      hasValidBeanEquals(), 
      hasValidBeanToString() 
    )); 
} 
+0

Bean Matchers图书馆转移到Github。新的URL https://github.com/orien/bean-matchers – 2017-08-07 08:15:28