单元测试类规范

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方法已经移除了该注解。编写此类测试是否明智?

即使在集成测试中也包括了这种情况,但集成测试提供的反馈不会指出问题。

1个回答

3

这要看具体情况。

这取决于注解对您的应用程序正常运行有多重要/关键。当然,人们可能会假设每一行代码都对应用程序的正常运行至关重要,但这听起来很笼统。

我来举个例子,我们使用注解测试来验证实现某个接口的类的方法是否标记了[Transaction]属性。为什么这很重要?因为很容易出现以下情况:

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

更糟糕的是,如果方法没有标记[Transaction],乍一看似乎并没有什么问题。应用程序运行并正常工作。但是你可能已经猜到,这样的方法不会在事务中运行 - 偶尔可能会导致极其难以跟踪的关键错误。编写此类测试的成本/收益非常低。

现在,@XMLElement对于您的应用程序正常工作有多重要,如果遗漏了它可能会导致多大的关键错误,就由您自己判断了。如果有疑问,请权衡成本与收益。对于我来说,如果可以用自动化测试(即使是成本高昂且易碎的测试)替换任何不确定、难以跟踪/调试的错误,我会毫不犹豫地这样做。


1
有道理。即使测试很脆弱,但它应该能够提供有关类公共行为的任何更改的反馈。注释是公共元数据的一部分,被库使用,很容易忽略它们。因此,我将以任何方式编写这些测试。 - Narendra Pathai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接