2017-11-16 2 views
0

콩을 주입하고 단일 생성자로 모의하는 방법을 찾고 있습니다.Spock Spring 생성자를 통해 모의 (mock)와 빈을 삽입하십시오.

@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'도 모의 또는 실제 빈이어야합니까? –

답변

0

내가 보는 한, 당신은 부분적 조롱을하려고합니다. 스프링 빈을 주입하려면 먼저 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); 
    } 
} 
관련 문제