[英]@mock annotation with custom Answer class in Mockito
我在我的项目中使用Mockito和Spring Framework。
我有一个这样的测试用例:
class SomeTest {
@Mock
SomeDao dao;
@InjectMock
TestTarget target;
class MyAnswer implements Answer {
//some method here
}
}
我想定义一个自定义的答案类MyAnswer
for dao
。
没有注释,我可以使用Mockito.mock(Dao.class, new MyAnswer())
使用MyAnswer强制我的模拟对象。 但我发现@Mock
注释,它们只接受enum Answers
参数,如Answers.RETURNS_DEFAULT
或Answers.RETURNS_MOCKS
。
我MyAnswer
使用@Mock
注释强制dao
使用MyAnswer
吗?
不幸的是,你不得不使用Mockito.mock
。 目前无法指定您通过@Mock编写的答案。
原因与Mockito没什么关系,与Java的注释规范有关:
参数只能键入基元,字符串,类,枚举,注释或任何这些参数的数组。 (Jason Hunter, “充分利用Java的元数据,第2部分:自定义注释” )
并在Java语言规范§9.6.1中 :
在注释类型中声明的方法的返回类型必须是以下之一,否则会发生编译时错误:
- 原始类型
- 串
- 类或类的调用(§4.5)
- 枚举类型
- 注释类型
- 一种数组类型,其组件类型是前面的类型之一(第10.1节)。
因为注释类型元素必须是有效的VM范围常量(包括枚举值但不包括任意实例),所以无法放置您创建的答案实例。 从理论上讲,Mockito可以让你指定一个名为Answer的子类 ,但是Mockito也会负责实例化它,这并不总是可行的,这会导致运行时失败。 如果该功能对您很重要,您可以考虑提出功能请求 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.