在基于spock的测试中模拟mockito模拟对象

时间:2016-04-25 09:51:34

标签: mockito spock

我和Mockito一起使用Spock fw。我有一个名为' HostController'以及名为' HostService'。

的服务

' HostController'有一个名为host(Long id)和' HostService'的方法。有一个名为findOne(Long id)的方法。

我想测试HostController#host(Long id),所以我想到了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的密钥。我假设密钥没有空值,但它具有空值。

为什么我的想法不起作用?

2 个答案:

答案 0 :(得分:4)

我找到了一个解决方案。

在上面的例子中,我尝试使用像HostService#findOne(Long id)这样的Spock来存储mockedService.findOne(_) >> host方法。也许似乎不适合Mockito的模拟对象。

Rene Enriquez向我介绍Spock Mock。它工作得很好。但是,我想使用@InjectMocks和@Mock。为此,我们遵循Mockito模拟和存根指令。(谢谢你,Enriquez)

修改后的例子是:

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存根,而不是Spock。它运作良好!

答案 1 :(得分:0)

试试这个:

import spock.lang.Specification

class MySpec extends Specification {
   HostController controller

   def setup() {
       controller = new HostController()
   }

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

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

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