Java 如何模拟本地创建的对象?
这是我的课Java 如何模拟本地创建的对象?,java,junit,powermock,powermockito,Java,Junit,Powermock,Powermockito,这是我的课 class Test { public void print(){ RestTemplate restTemplate = new RestTemplate(); restTemplate.getForObject("url", String.class); } } 为了测试这个类,我想模拟“RestTemplate”。有没有什么方法可以在不更改代码的情况下做到这一点。如果不更改代码,就无法做到这一点,至少不能以优雅的方式做到这一点
class Test {
public void print(){
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("url", String.class);
}
}
为了测试这个类,我想模拟“RestTemplate”。有没有什么方法可以在不更改代码的情况下做到这一点。如果不更改代码,就无法做到这一点,至少不能以优雅的方式做到这一点
每次输入print()
方法时,都会创建一个新的restemplate
实例,因此无法传入模拟
稍微更改方法以使用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
}
}
您希望在测试中使用
restemplate
的注入实例
@Autowired
private TestRestTemplate restTemplate;
在测试设置中,您可以根据需要模拟
restTemplate
的行为。您不能。这就是为什么Spring的核心是一个依赖注入框架。将依赖项作为参数传递给组件构造函数(或setters)。依赖项注入可以使用,但如果可以将源代码改为接受注入的依赖项,则确实不应该这样做。实际上,可以使用字节码操纵来模拟构造函数,但无论是否应该,这是另一个问题。仅仅为了使一个类可测试而对一个问题使用spring有点过头了。。。