是否有一个Java单元的测试框架,自动测试,吸气,并制定者?[关闭]

StackOverflow https://stackoverflow.com/questions/108692

  •  01-07-2019
  •  | 
  •  

有一个众所周知的辩论的Java(和其他社区,我是肯定的)是否或不平凡的吸气/设置方法应该进行测试。通常,这是相对于代码的复盖范围。我们认为,这是一次公开辩论,而不是试图回答在这里。

有过几次博客上使用Java反射汽车试验这种方法。

是否有任何框架(例如jUnit)提供这样的功能?例如一个注释,说"这种试验T应当自动测试所有的干将/者在C类,因为我断言,它们是标准"。

在我看来,它将增加价值,和如果它们可配置的,'的辩论将保留为一个选项的用户。

有帮助吗?

解决方案

Unitils 使用静态方法 assertRefEquals 执行此操作。

其他提示

我不知道有任何现成的库或类可以做到这一点。这可能主要是因为我不在乎,因为我坚决反对这样的测试。所以,即使你要求必须对这个观点有点理由:

我怀疑自动测试的getter和setter是否有益于您的代码质量或覆盖范围:这些方法都可以从其他代码中使用(并在那里进行测试,例如100%覆盖)或根本不使用(并且可以删除)。最后,您将留下getter和setter,因为它们是从测试中使用的,但在应用程序中没有其他地方。

编写这样的测试应该很容易,例如使用Apache Commons BeanUtils,但如果你有其他好的测试,我怀疑你真的需要它。

我创造的 OpenPojo 项目解决这个 确切的 问题。

该项目可以让你来验证:

  • 执行组编码标准(即所有领域的私人,或者没有母的变量,等)
  • 执行组成的行为(即装定做的只是设置,没有改造,等等)
  • 验证功的身份(即使用注释的基于平等和哈希码生成)

见教程

在大多数情况下定者和吸气做更多的工作只能设置和获取内部领域。一个对象,以检查内部规则,它只举行的有效值。例如

  • 是无价值可能吗?
  • 是空的串可能吗?
  • 或负面的价值?
  • 或零价值?
  • 或价值从一个名单是有效?
  • 还是有最大的价值?
  • 或者是有一个最高的精准度上BigDecimal价值?

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

如果你有没有逻辑上的定者和吸气,然后它必须在任何地方使用的应用程序。写一个测试,你的对象是一个参数,对于一个更复杂的测试。你可以测试它然后用不同的价值观。

测试你的业务逻辑和不吸气和定者。结果还应该复盖的吸气和定者。该方法应该是任何结果在你的商务逻辑的,也如果你只有一个公共图书馆。如果吸气器和没有复盖代码然后去除它。

我做过类似的事情。一个简单的java类,它接受一个对象并测试所有getter和setter方法。 http://sourceforge.net/projects/getterandsetter/

我认为你应该尽可能地避免使用getter和setter方法,但只要它们存在并且需要两行来测试它们,那么这样做是件好事。

我赞成OO设计而不是代码覆盖,看看我是否无法将这些字段移动到需要它们的类中。所以我会尝试看看是否可以删除这些getter和setter,如前所述。 getter和setter是打破封装

我想这个图书馆是您问题的答案

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

它还可以测试具有其他非默认构造函数的bean对象。

我正在尝试openpojo

我已经踢了轮胎,似乎可以胜任。

  1. 它允许您检查项目中的所有pojo。
  2. 似乎检查了pojo的最佳实践
  3. 查看本教程以快速入门 教程

@ me ,因为我的声誉:

  

Vlookward,不写getter / setter完全没有意义。设置私有字段的唯一选项是使用显式setter,在构造函数中设置它们,或者通过其他方法间接设置(在功能上将setter推迟到另一个地方)。为什么不使用setter?

嗯,有时,这个领域没有必要是私人的(对不起,如果我的英语不是很好)。通常,我们编写软件,因为它是一个库,我们用不必要的getter / setter封装我们的字段(我们的业务逻辑字段)。

其他时候,这些方法实际上是必要的。然后,有两种可能性:
1.内部有业务逻辑。然后他们会被测试,但他们不是真正的吸气者/制定者。我总是把这个逻辑写在其他类中。测试测试其他类,而不是 POJO
没有。然后,如果可以的话,不要手工编写。例如,下一个接口的实现可以完全自动生成(也可以在运行时!):

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

因此,只测试手写的内容。无论是吸气剂还是吸气剂。

我不为每个属性编写测试用例,而是使用reflection / introspector在单个测试用例中测试所有setter / getter来确定类型。这是一个很好的资源,显示了这一点:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top