是否有一个Java单元测试框架,自动测试getter和setter方法? [关闭](Is the

2019-06-25 03:34发布

有在Java中一个著名的辩论(和其他社区,我敢肯定)微不足道的getter / setter方法是否应该进行测试。 通常,这是相对于代码覆盖。 我们认为,这是一个公开辩论,而不是试图在这里回答。

已经有使用Java反射来自动测试这种方法的几个博客帖子。

有没有任何框架(如JUnit的)提供了这样的功能? 例如,上面写着一个注解“这个测试T应当自动测试所有的getter /上C类制定者,因为我认为他们是标准的”。

在我看来,这将增加价值,如果它是可配置的,在“辩论”将留待作为一个选项给用户。

Answer 1:

Unitils做到这一点瓦特/静态方法assertRefEquals



Answer 2:

我不知道这是否任何现成的库或类的。 这可能主要是因为我不在乎,因为我上的强烈反对这种试验的一侧。 因此,即使你要求必须有一点理由这一观点:

我怀疑,自动测试的getter和setter利于你的代码质量或您的覆盖面:这两种方法都是从其他代码中使用(和测试在那里,例如100%覆盖),或根本不使用(而且可以去掉)。 在最后,你会在应用程序中留下的getter和setter,因为它们从测试使用,但其他地方。

它应该很容易写这样的测试,例如与Apache共享BeanUtils的,但我怀疑你真的需要它,如果你有很好的测试,否则。



Answer 3:

我创建了OpenPojo项目解决这一确切的问题。

该项目允许您验证:

  • 强制POJO的编码标准(即所有字段私人,或没有原生变量,...等)
  • 强制POJO的行为(即二传不只是设置,没有改造等)
  • 验证POJO的身份(即使用基于注解的平等和散列码代)

请参见教程



Answer 4:

在大多数情况下,setter和getter做多,因为只有设置和获取内场。 一个对象有检查,它仅持有有效值内部规则。 例如

  • 是空值可能吗?
  • 是空字符串可能吗?
  • 或负值?
  • 或零值?
  • 或从列表中值是有效的?
  • 或者是有一个最大的价值?
  • 或者是有上的BigDecimal值最大精度?

单元测试应该检查是否正确的行为,如果有无效值。 这不能自动化。

如果您对二传手没有逻辑和getter那么它必须在应用程序中的任何地方使用。 写一个测试,你的对象是一个更复杂的测试参数。 您可以从列表中不同的值进行测试即可。

测试你的业务逻辑,而不是getter和setter。 也结果应该getter和setter的覆盖。 该方法应该是什么结果在你的业务逻辑,如果你还只有一个公共图书馆。 如果getter和setter没有代码覆盖率,然后删除它。



Answer 5:

我已经做了类似的东西。 一个简单的Java类,带有一个对象和测试所有getter和setter方法。 http://sourceforge.net/projects/getterandsetter/

我认为你应该避免getter和setter方法尽可能的,但只要他们身边,它需要两条线,以测试他们来说,这是一个很好的事情去做。



Answer 6:

我赞成OO设计了代码覆盖,看能不能将这些字段需要它们的类。 因此,我想试试,看看是否这些getter和setter方法可以移除之前建议。 getter和setter被破坏了封装 。



Answer 7:

我想这个库是回答你的问题

它测试bean的所有初始值的setters ,在gettershashCode(), equals() and toString() 所有你需要做的就是定义地图默认和非默认属性/值。

它还可以测试是豆额外的非默认的构造函数的对象。



Answer 8:

我想出去openpojo

我已经踢轮胎,它似乎做的工作。

  1. 它可以让你检查所有的POJO在你的项目中。
  2. 它似乎检查POJO的最佳实践

检查本教程的快速启动指南



Answer 9:

回答在以前的评论@me这里是因为我的名气:

Vlookward,不写getter / setter方法是没有意义的。 设置私人领域唯一的选择是有明确的制定者,将它们设置在你的构造函数,或设置间接通过其他方法(功能推迟二传手到另一个地方)。 为什么不使用setter方法?

嗯,有时候,没有必要到外地是私有的(如果我的英语是对不起不是很好)。 通常情况下,我们写的软件,因为它是一个图书馆,我们封装了不必要的getter / setter方法领域(我们的业务逻辑域)。

其他时候,该方法实际上是必要的。 然后,有两种可能性:
1.里面有他们的业务逻辑。 然后,他们将前人的精力进行测试,但它们不是真正的getter / setter方法。 我总是写在其它类逻辑。 并且测试测试其他类,而不是POJO。
2.没有。 然后,不要用手,如果你能写出来。 例如,对于下一个接口的实现可完全自动生成(也是在运行!):

interface NamedAndObservable {
  String getName();
  void setName(String name);
  void addPropertyChangeListener(PropertyChangeListener listener);
  void addPropertyChangeListener(String propertyName,
                                 PropertyChangeListener listener);
}

因此只测试什么是手写的。 不管它是一个getter / setter方法。



Answer 10:

我不写测试用例为每个属性,而是使用反射/内省确定类型(一个或多个)测试所有的设置器/吸气剂在单个测试用例。 这里是显示这个伟大的资源:

http://www.nearinfinity.com/blogs/scott_leberknight/do_you_unit_test_getters.html



文章来源: Is there a Java unit-test framework that auto-tests getters and setters? [closed]