2017-11-16 6 views
0

私は豆を注入して単一のコンストラクタにモックする方法を探しています。Spock Springはコンストラクタ経由でモックとビーンを挿入します

@Service 
public class SomeService { 

private EndpointUrlProvider endpointUrlProvider; 
private RestTemplate restTemplate; 

@Autowired 
public SomeService(EndpointUrlProvider endpointUrlProvider, RestTemplate restTemplate){ 
    this.endpointUrlProvider = endpointUrlProvider; 
    this.restTemplate = restTemplate; 
} 

テスト:

class SomeTest extends Specification { 

@Autowired 
EndpointUrlProvider endpointUrlProvider 

RestTemplate restTemplate = Mock { 
    postForEntity(_, _, SomeResponse.class) >> new ResponseEntity(new SomeResponse(), HttpStatus.OK) 
} 

SomeService someService = new SomeService(endpointUrlProvider, restTemplate) 

//some tests 
    } 

私はsomeServiceで私endpointUrlProviderをテスト発射するときはnullです。私が間違ったことは?これをテストする最良の方法は何ですか?

+0

'EndpointUrlProvider'もモックまたは本物のBeanですか? –

答えて

0

私が見る限り、あなたは部分的な嘲笑をしようとしています。 Spring Beanをインジェクトするには、まずTestContextManagerが必要です。したがって、SpringRunnerまたはSpringJUnit4ClassRunnerでテストを実行してください。これは作業を行う必要があります:

@RunWith(SpringRunner.class) 
public class SomeServiceTest { 

    @Autowired 
    private EndpointUrlProvider endpointUrlProvider; 

    @Before 
    public setUp() { 
     RestTemplate restTemplate = mock(RestTemplate.class); 
     SomeService someService = new SomeService(endpointUrlProvider, restTemplate); 
    } 
} 
関連する問題