簡體   English   中英

Spock Spring通過構造函數注入模擬和bean

[英]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 因此,請使用SpringRunnerSpringJUnit4ClassRunner運行測試。 這應該做的工作:

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM