java - 单元测试类规范

标签 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 test中也有覆盖,但是Integration提供的反馈不会指出问题。

最佳答案

这取决于。

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

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

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

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

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

关于java - 单元测试类规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19511760/

相关文章:

unit-testing - IMapper 模拟返回 null

django - Django Unit Test,用于测试文件下载

java - 在javax.scripting上下文中设置InstructionObserverThreshold

java - CellStyle共享同一个堆地址apache poi

java - 在Java中测试MongoDB : concurrency problems

java - 在运行时生成类的新实例失败

java - 在java中显示数据库的表

c++ - 谷歌模拟无法模拟带有模板化参数的方法

python - django rest 框架错误单元测试 : TypeError: object of type 'type' has no len()

java PowerMockito 忽略方法调用