是否有一个Java单元的测试框架,自动测试,吸气,并制定者?[关闭]
-
01-07-2019 - |
题
有一个众所周知的辩论的Java(和其他社区,我是肯定的)是否或不平凡的吸气/设置方法应该进行测试。通常,这是相对于代码的复盖范围。我们认为,这是一次公开辩论,而不是试图回答在这里。
有过几次博客上使用Java反射汽车试验这种方法。
是否有任何框架(例如jUnit)提供这样的功能?例如一个注释,说"这种试验T应当自动测试所有的干将/者在C类,因为我断言,它们是标准"。
在我看来,它将增加价值,和如果它们可配置的,'的辩论将保留为一个选项的用户。
解决方案
Unitils 使用静态方法 assertRefEquals
执行此操作。
其他提示
我不知道有任何现成的库或类可以做到这一点。这可能主要是因为我不在乎,因为我坚决反对这样的测试。所以,即使你要求必须对这个观点有点理由:
我怀疑自动测试的getter和setter是否有益于您的代码质量或覆盖范围:这些方法都可以从其他代码中使用(并在那里进行测试,例如100%覆盖)或根本不使用(并且可以删除)。最后,您将留下getter和setter,因为它们是从测试中使用的,但在应用程序中没有其他地方。
编写这样的测试应该很容易,例如使用Apache Commons BeanUtils,但如果你有其他好的测试,我怀疑你真的需要它。
在大多数情况下定者和吸气做更多的工作只能设置和获取内部领域。一个对象,以检查内部规则,它只举行的有效值。例如
- 是无价值可能吗?
- 是空的串可能吗?
- 或负面的价值?
- 或零价值?
- 或价值从一个名单是有效?
- 还是有最大的价值?
- 或者是有一个最高的精准度上BigDecimal价值?
该单元的测试应该检查,如果该行为正确的,如果有无效值。这不可能是自动的。
如果你有没有逻辑上的定者和吸气,然后它必须在任何地方使用的应用程序。写一个测试,你的对象是一个参数,对于一个更复杂的测试。你可以测试它然后用不同的价值观。
测试你的业务逻辑和不吸气和定者。结果还应该复盖的吸气和定者。该方法应该是任何结果在你的商务逻辑的,也如果你只有一个公共图书馆。如果吸气器和没有复盖代码然后去除它。
我做过类似的事情。一个简单的java类,它接受一个对象并测试所有getter和setter方法。 http://sourceforge.net/projects/getterandsetter/
我认为你应该尽可能地避免使用getter和setter方法,但只要它们存在并且需要两行来测试它们,那么这样做是件好事。
我赞成OO设计而不是代码覆盖,看看我是否无法将这些字段移动到需要它们的类中。所以我会尝试看看是否可以删除这些getter和setter,如前所述。 getter和setter是打破封装。
它测试所有bean的初始值, setters
, getters
, hashCode(),equals()和toString()
。您所要做的就是定义默认和非默认属性/值的地图。
它还可以测试具有其他非默认构造函数的bean对象。
在 @ 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