繁体   English   中英

@mock注释与Mockito中的自定义答案类

[英]@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_DEFAULTAnswers.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM