Mockito 不能在 Spock 测试中监视 class 吗?
Cannot Mockito spy class in Spock test?
我正试图在 Spock 测试中监视 Java class。我之前在 Spock/Groovy 中没有遇到过 Mockito 的问题。
当我尝试执行以下操作时:
def service = spy(Service.class)
我收到以下错误:
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class java.lang.Class
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
不过,当我执行 mock(Service.class)
时,它工作正常。
我已确认 class 不是最终的、匿名的或原始的。
有什么想法吗?我在 class (ak) 中有一个随机生成器,所以我需要监视而不是模拟。
谢谢
Mockito 不会监视 类(或模拟),它会监视(常规)对象。因此,而不是
def service = spy(Service.class)
你必须写
def service = spy(new Service())
(或适合您的场景的构造函数)。
除了 Ray 的回答之外,您还可以监视已创建的实例。唯一的问题是,您在 spy()
之前调用的所有方法都无法验证。喜欢:
ClassToSpy spiedInstance;
@Before
public void before () {
spiedInstance = new ClassToSpy();
}
@Test
public void testWillFail() {
spiedInstance.method();
spiedInstance = spy(spiedInstance);
verify(spiedInstance).method();
}
@Test
public void testWillPass() {
spiedInstance = spy(spiedInstance);
spiedInstance.method();
verify(spiedInstance).method();
}
您从 testWillFail
得到的错误类似于:
Wanted but not invoked:
classToSpy.method();
-> at your.package.testWillFail(TestClass.java:line)
Actually, there were zero interactions with this mock.
由于你窥探后没有调用这个方法
我正试图在 Spock 测试中监视 Java class。我之前在 Spock/Groovy 中没有遇到过 Mockito 的问题。
当我尝试执行以下操作时:
def service = spy(Service.class)
我收到以下错误:
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class java.lang.Class
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
不过,当我执行 mock(Service.class)
时,它工作正常。
我已确认 class 不是最终的、匿名的或原始的。
有什么想法吗?我在 class (ak) 中有一个随机生成器,所以我需要监视而不是模拟。
谢谢
Mockito 不会监视 类(或模拟),它会监视(常规)对象。因此,而不是
def service = spy(Service.class)
你必须写
def service = spy(new Service())
(或适合您的场景的构造函数)。
除了 Ray 的回答之外,您还可以监视已创建的实例。唯一的问题是,您在 spy()
之前调用的所有方法都无法验证。喜欢:
ClassToSpy spiedInstance;
@Before
public void before () {
spiedInstance = new ClassToSpy();
}
@Test
public void testWillFail() {
spiedInstance.method();
spiedInstance = spy(spiedInstance);
verify(spiedInstance).method();
}
@Test
public void testWillPass() {
spiedInstance = spy(spiedInstance);
spiedInstance.method();
verify(spiedInstance).method();
}
您从 testWillFail
得到的错误类似于:
Wanted but not invoked:
classToSpy.method();
-> at your.package.testWillFail(TestClass.java:line)
Actually, there were zero interactions with this mock.
由于你窥探后没有调用这个方法