Liy*_*uan 4 java spring unit-testing mockito
我在我的项目中使用 Mockito 和 Spring Framework。
我有一个这样的测试用例:
class SomeTest {
@Mock
SomeDao dao;
@InjectMock
TestTarget target;
class MyAnswer implements Answer {
//some method here
}
}
Run Code Online (Sandbox Code Playgroud)
我想MyAnswer为定义一个自定义答案类dao。
如果没有注释,我可以Mockito.mock(Dao.class, new MyAnswer())使用 MyAnswer 来强制我的模拟对象。但我发现通过@Mock注释,它们只接受enum AnswerslikeAnswers.RETURNS_DEFAULT或内部的参数Answers.RETURNS_MOCKS。
我可以强制dao使用MyAnswer注释@Mock吗?
不幸的是不是\xe2\x80\x94你必须使用Mockito.mock。目前无法指定您通过@Mock 编写的答案。
原因与 Mockito 关系不大,而与 Java 的注释规范有关:
\n\n\n\n参数只能输入为原语、字符串、类、枚举、注释或其中任何一个的数组。(Jason Hunter,“充分利用 Java 元数据,第 2 部分:自定义注释”)
\n
\n\n注解类型中声明的方法的返回类型必须是以下类型之一,否则会出现编译时错误:
\n\n
\n- 原始类型
\n- 细绳
\n- 类或类的调用 (\xc2\xa74.5)
\n- 枚举类型
\n- 注释类型
\n- 其组件类型为上述类型之一的数组类型 (\xc2\xa710.1)。
\n
由于注释类型元素必须是有效的 VM 范围常量(包括枚举值,但不包括任意实例),因此无法放置您创建的答案实例。理论上,Mockito 可以让您指定一个命名的 Answer子类,但随后 Mockito 还将负责实例化它,这并不总是可能的,并且会导致运行时失败。如果该功能对您来说很重要,您可以考虑提出功能请求。
\n| 归档时间: |
|
| 查看次数: |
2518 次 |
| 最近记录: |