Java @Mockito中带有自定义答案类的mock注释
我在我的项目中使用了Mockito和Spring框架 我有一个这样的测试用例:Java @Mockito中带有自定义答案类的mock注释,java,spring,unit-testing,mockito,Java,Spring,Unit Testing,Mockito,我在我的项目中使用了Mockito和Spring框架 我有一个这样的测试用例: class SomeTest { @Mock SomeDao dao; @InjectMock TestTarget target; class MyAnswer implements Answer { //some method here } } 我想为dao定义一个自定义答案类MyAnswer 如果没有注释,我可以使用Mockito.mock(
class SomeTest {
@Mock
SomeDao dao;
@InjectMock
TestTarget target;
class MyAnswer implements Answer {
//some method here
}
}
我想为dao
定义一个自定义答案类MyAnswer
如果没有注释,我可以使用Mockito.mock(Dao.class,new MyAnswer())
强制我的mock对象使用MyAnswer。但是我发现使用@Mock
注释,它们只接受枚举答案
中的参数,就像答案一样。返回默认值或答案。返回\u Mock
我可以强制dao
使用MyAnswer
和@Mock
注释吗 不幸的是,您将不得不为此使用Mockito.mock
。目前无法指定您通过@Mock编写的答案
原因与Mockito无关,与Java的注释规范有关:
只能将参数类型化为基元、字符串、类、枚举、注释或其中任何一个的数组。(詹森·亨特)
以及在:
注释类型中声明的方法的返回类型必须是以下类型之一,否则会发生编译时错误:
- 原始类型
- 串
- 类别或类别的调用(§4.5)
- 枚举类型
- 注释类型
- 一种数组类型,其组件类型为上述类型之一(§10.1)
因为注释类型元素必须是有效的VM范围常量(包括枚举值但不包括任意实例),所以无法放置您创建的应答实例。理论上,Mockito可以让您指定一个命名的应答子类,但是Mockito还将负责实例化它,这并不总是可能的,并且会导致运行时失败。如果这个特性对你来说很重要,你可以考虑制作一个.< /p>谢谢你的帮助。它正好帮助我理解Java中的注释逻辑:)