这是我的班级。
class Test {
public void print(){
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("url", String.class);
}
}
要测试此类,我想模拟" RestTemplate"。有没有任何方法可以在不更改代码的情况下执行此操作。
不能在不更改代码的情况下完成,至少不能以优雅的方式进行。
每次输入print()
方法时,您都会创建RestTemplate
的新实例,因此无法通过模拟。
稍微更改使用RESTTEMPLATE作为参数的方法。在运行时,这将是RESTTEMPLATE的实际实例,但是当单元测试该方法时,它可以接受模拟。
class Test {
public void print(RestTemplate restTemplate){
restTemplate.getForObject("url", String.class);
}
}
class TestTest {
private final Test instance = new Test();
@Test
public testPrint() {
RestTemplate restTemplateMock = mock(RestTemplate.class);
instance.print(restTemplateMock);
// TODO: verify method calls on the mock
}
}
您要使用RestTemplate
的注射实例进行测试。
@Autowired
private TestRestTemplate restTemplate;
在测试设置中,您可以按照需要模拟restTemplate
的行为。