[英]Spock Spring inject mock and bean via constructor
我正在尋找如何在單個構造函數中注入bean和模擬的方法。
@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。 我做錯了什么? 最好的測試方法是什么?
據我所知,您正在嘗試進行部分模擬。 要注入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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.