gpt4 book ai didi

mockito - 在基于 spock 的测试中对 mockito 模拟对象进行 stub

转载 作者:行者123 更新时间:2023-12-01 12:28:39 31 4
gpt4 key购买 nike

我正在使用 Spock fw 和 Mockito。我有一个名为“HostController”的 Controller 和一个名为“HostService”的服务。

“HostController”的方法名为 host(Long id)并且“HostService”具有名为 findOne(Long id) 的方法.

我要测试HostController#host(Long id) ,所以我想到了 stub findOne(Long id)方法。

以下是测试代码:

class MockTest extends Specification {
@Mock
private HostService mockedService;

@InjectMocks
private HostController controller;

def setup() {
MockitoAnnotations.initMocks(this);
}

def "mock test"() {
given:
def host = new Host(id: 1, ipAddress: "127.0.0.1", hostName: "host1")
mockedService.findOne(_) >> host

when:
Map<String, Object> result = controller.host(1)

then:
result.get("host") != null
}
}

在上面的测试中, controller.host(1)返回 Map<String, Object>键入,它的键名为 host .我假设键没有空值,但它有空值。

为什么不像我想的那样工作?

最佳答案

我找到了解决方案之一。

在上面的例子中,我试图 stub HostService#findOne(Long id)使用 Spock 之类的方法 mockedService.findOne(_) >> host .也许它似乎不适合 Mockito 的模拟对象。

Rene Enriquez向我介绍 Spock Mock。它运作良好。但是,我想使用@InjectMocks 和@Mock。为此,我们遵循 Mockito 模拟和 stub 指令。(谢谢,恩里克斯)

修改后的例子是:

import static org.mockito.Mockito.when;

class MockTest extends Specification {
@Mock
private HostService mockedService;

@InjectMocks
private HostController controller;

def setup() {
MockitoAnnotations.initMocks(this);
}

def "mock test"() {
given:
def host = new Host(id: 1, ipAddress: "127.0.0.1", hostName: "host1")
when(mockedService.findOne(1)).thenReturn(host)

when:
Map<String, Object> result = controller.host(1)

then:
result.get("host") != null
}
}

我们可以使用 Mockito stub ,而不是 Spock 的 stub 。它运作良好!

关于mockito - 在基于 spock 的测试中对 mockito 模拟对象进行 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36837167/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com