如何模拟本地创建的对象?
How do I mock a locally created object?
这是我的class。
class Test {
public void print(){
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("url", String.class);
}
}
为了测试这个 class,我想模拟 "RestTemplate"。有没有什么办法可以做到不改代码呢
如果不更改代码,不能完成,至少不能以优雅的方式完成。
每次进入print()
方法时都会创建一个RestTemplate
的新实例,因此无法传入mock。
稍微改变一下使用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
的行为。
这是我的class。
class Test {
public void print(){
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("url", String.class);
}
}
为了测试这个 class,我想模拟 "RestTemplate"。有没有什么办法可以做到不改代码呢
如果不更改代码,不能完成,至少不能以优雅的方式完成。
每次进入print()
方法时都会创建一个RestTemplate
的新实例,因此无法传入mock。
稍微改变一下使用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
的行为。