单元测试类规范

时间:2013-10-22 07:34:26

标签: java unit-testing

我想测试类的规范,当从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提供的反馈不会指出问题。

1 个答案:

答案 0 :(得分:3)

这取决于。

这取决于注释所在的对您的应用程序起作用的重要性。这当然可能听起来非常普遍,因为人们可能会认为每一段代码对于应用程序正常运行都很重要。

我会从我自己的后院给你举例 - 我们使用注释测试来验证实现某些接口的类的方法是否标有[Transaction]属性。为什么这很重要?因为它非常容易:

  • 忘记标记方法
  • 意外删除属性
  • 成为不幸合并事故的受害者

更糟糕的是,当方法标有[Transaction]时,乍一看没有什么不好的事情发生。应用程序运行正常。但正如您可能已经猜到的那样,这种方法不会在事务中运行 - 偶尔可能会导致严重错误,极其难以跟踪。编写此类测试/福利的成本非常低。

现在,@XMLElement对于您的应用程序的正确运行有多重要以及它可能导致的严重错误是否缺失是您要判断的。如有疑问,请权衡成本与收益。至于我,如果我可以用自动化测试替换任何非确定性,难以跟踪/调试错误(即使是昂贵且脆弱的),我会在任何时候都这样做。