4

我想以这样一种方式测试类的规范,即当从 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 方法中删除。编写这样的测试是否可取?

这种情况甚至在集成测试中也有覆盖,但是集成提供的反馈并不会指出问题所在。

4

1 回答 1

3

这取决于。

这取决于您的应用程序运行该注释的重要性/关键程度。这当然听起来很笼统,因为人们可能会假设每一段代码对于应用程序的正常运行都很重要。

我给你举个我自己后院的例子——我们使用注解测试来验证实现某个接口的类的方法是否被标记了[Transaction]属性。为什么这很重要?因为它很容易:

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

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

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

于 2013-10-22T08:50:09.913 回答