我想以一种方式测试类的规范,当从 getter 方法中删除注释时,测试应该失败并警告类的规范已更改。
class SomeBean{
@XMLElement(name = "name")
public String getName(){
return name;
}
}
class SomeBeanUnitTest{
@Test
public void test_getNameMustHaveAnnotation(){
Method getNameMethod = SomeBean.class.getDeclaredMethod("getName", new Class<?>[]{});
assertNotNull(getNameMethod.getAnnotation(XmlElement.class));
}
}
声明注释的测试方法是否是检查类规范的正确方法?因为这会使测试更脆弱,但它会提供适当的反馈,说明注释已从 getter 方法中删除。编写此类测试是否可取?
这种情况在Integration test中也有覆盖,但是Integration提供的反馈不会指出问题。
最佳答案
这取决于。
这取决于注释的重要性/对您的应用程序工作的重要性。这当然听起来很笼统,因为人们可能会认为每段代码对于应用程序的正常运行都很重要。
我会给你我自己后院的例子——我们使用注解测试来验证实现特定接口(interface)的类的方法是否用[Transaction]
属性标记。为什么这很重要?因为这很容易:
- 忘记标记方法
- 不小心删除了属性
- 成为不幸合并事故的受害者
更糟糕的是,当方法没有用[Transaction]
标记时,乍一看并没有什么不好的事情发生。应用程序运行并正常运行。但正如您可能已经猜到的那样,这种方法不会在事务中运行 - 偶尔可能会导致严重难以跟踪的错误。编写此类测试的成本/ yield 非常低。
现在,@XMLElement
对于您的应用程序的正常工作有多重要,以及如果缺少它可能导致的严重错误有多大,就由您来判断了。如有疑问,请权衡成本与 yield 。至于我,如果我可以用自动化测试(即使是昂贵且脆弱的)替换任何非确定性、难以跟踪/调试的错误,我随时都会这样做。
关于java - 单元测试类规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19511760/