[英]Injecting non-mocks defined by a @Configuration class into a unit test
[英]Unit test service class with mocks using TestNG
我正在嘗試為通用服務類編寫單元測試,如下所示:
public class ApiService{
private RestTemplate restTemplate;
private ServiceDao serviceDao;
@Autowired
public ApiService(RestTemplate restTemplate, ServiceDao serviceDao) {
this.restTemplate = restTemplate;
this.serviceDao = serviceDao;
}
public ResponseEntity getObject(ObjectRequest request) {
// Service logic here
}
public ResponseEntity postObject(CreateObjectRequest request) {
// Service logic here
}
}
但是我在為如何在服務類的構造函數中模擬restTemplate而苦苦掙扎,以至於當測試運行時,數據不會持久化。.盡管沒有在此看到很多有關Mockito + TestNG的示例或文檔,但我一直在研究Mockito。上下文。 任何幫助,將不勝感激
首先-如果可能的話,在您的服務中注入RestOperations而不是RestTemplate。 然后,您將可以輕松模擬其行為(注意:RestTemplate實現RestOperations)。
如果無法使用RestOperations-您可以執行以下操作:
RestTemplate myTemplate = Mockito.spy(new RestTemplate());
String expectedOutput = "hello mock";
String inputUrl = "https://stackoverflow.com/questions/53872148/unit-test-service-class-with-mocks-using-testng";
Mockito.doReturn(expectedOutput).when(myTemplate).getForObject(inputUrl, String.class);
String result = myTemplate.getForObject(inputUrl, String.class);
Assert.assertEquals(expectedOutput, result);
實際上,我已經使用Mockito構造了一種方法,如下所示:可能會有一個更優雅的解決方案,所以我很想看看:
public class ServiceTest {
@BeforeMethod(groups="serviceTest")
public void beforeMethod() {
MockitoAnnotations.initMocks(this);
}
@Test(groups="serviceTest")
public void testGetService_returns200() {
when(serviceDao.getService(any(String.class), any(RestTemplate.class), any(HttpHeaders.class))).thenReturn(new ResponseEntity(new Object(), HttpStatus.OK));
ObjectRequest request = new ObjectRequest();
// set request values
ResponseEntity testResponse = apiService.getObject(request);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.