2016-04-25 5 views
1

私はMockitoでSpock fwを使用しています。私は 'HostController'という名前のコントローラと 'HostService'という名前のサービスを持っています。spockベースのテストでのmockitoモックオブジェクトのスタビング

'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という名前のキーを持っています。私は、キーがnull値ではないと仮定しましたが、値はnullです。

なぜ私は思ったように機能しませんか?

答えて

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 
    } 
} 
+0

うまく動作します。しかし、私はSpock Mockの代わりにMockitoを使いたい。 – Devcken

+0

私は主張して申し訳ありませんが、なぜですか? –

2

私は解決策の一つを発見しました。

上記の例では、mockedService.findOne(_) >> hostのようにSpockを使用してHostService#findOne(Long id)メソッドをスタブしようとしました。おそらくそれはMockitoのモックオブジェクトに適合しないようです。

Rene Enriquez私にSpock Mockを紹介します。それはとてもうまくいく。しかし、私は@ InjectMocksと@Mockを使いたいです。これを行うには、我々はMockitoモックとスタブの指示に従ってください(、エンリケスありがとう)

変形例がある:。

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のスタブを使用することができ、ないスポックさん。うまくいく!

関連する問題