Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Mockito中带有自定义答案类的mock注释_Java_Spring_Unit Testing_Mockito - Fatal编程技术网

Java @Mockito中带有自定义答案类的mock注释

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(

我在我的项目中使用了Mockito和Spring框架

我有一个这样的测试用例:

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中的注释逻辑:)