如何模拟本地创建的对象?

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 的行为。