@Mock注释,带有Mockito中的自定义答案类



我正在使用项目中的弹簧框架使用Mockito。

我有这样的测试用例:

class SomeTest {
    @Mock
    SomeDao dao; 
    @InjectMock
    TestTarget target;
    class MyAnswer implements Answer {
       //some method here
    }
}

我想为dao定义自定义答案类MyAnswer

没有注释,我可以使用Mockito.mock(Dao.class, new MyAnswer())使用Myanswer强制模拟对象。但是我发现使用@Mock注释,它们仅接受enum Answers内部的参数,例如Answers.RETURNS_DEFAULTAnswers.RETURNS_MOCKS

我可以强制使用MyAnswer使用@Mock注释的dao吗?

不幸的是,您必须使用Mockito.mock。当前无法指定您通过@Mock编写的答案。

原因与Mockito无关,与Java的注释规格有关:

参数只能以原始,字符串,类,枚举,注释或其中任何一个数组的形式键入。(Jason Hunter,"充分利用Java的元数据,第2部分:自定义注释"

和Java语言规范§9.6.1:

在注释类型中声明的方法的返回类型必须是以下一个,或者发生编译时间错误:

  • 原始类型
  • 字符串
  • 班级或类(第4.5款)的调用
  • 枚举类型
  • 注释类型
  • 一个数组类型的组件类型是前面类型之一(§10.1)。

由于注释类型元素必须有效地是VM范围的常数(包括枚举值,但不包括任意实例),因此无法放置您创建的答案实例。从理论上讲,Mockito可以让您指定一个命名的答案子类,但随后Mockito也将负责实例化,这并不总是可能并导致运行时失败。如果该功能对您来说很重要,则可以考虑提出功能请求。

相关内容

  • 没有找到相关文章

最新更新