gpt4 book ai didi

java - 如何在 JUnit 中模拟本地对象创建

转载 作者:行者123 更新时间:2023-11-30 06:40:35 26 4
gpt4 key购买 nike

我不知道如何使用 JUnit 和 mockito 在方法中模拟本地对象。

JDK - 1.7,JUnit - 4.12,powermock-module-junit4 - 1.6.6,powermock-api-mockito - 1.6.6

还有一点,我必须只使用 JDK 1.7。

在下面的示例类中,如何模拟方法范围内的“服务”对象。

class A {
public String methodA() {

SampleService service = new SampleService();
return service.retrieveValue();

}
}

请提出建议。

最佳答案

你不能模拟局部变量。但您可以执行以下操作:

1) 创建工厂并注入(inject)测试类。重构之后,您可以模拟工厂并为测试对象提供模拟服务。

class A {
private SampleServiceFactory factory;
public String methodA() {
SampleService service = factory.createSampleService();
return service.retrieveValue();
}
}

在测试中,您应该注入(inject)工厂模拟,然后在调用 createSampleService() 时返回服务模拟:

when(mockFactory.retrieveValue()).thenReturn(mockService);

2) 您可以提取方法并在测试中覆盖它并返回模拟而不是实现:

class A {
public String methodA() {
SampleService service = createSampleService();
return service.retrieveValue();
}

protected SampleService createSampleService() {
return new SampleService();
}
}

在这种方法中,您可以执行以下操作:@测试

public void testServiceCall() {
A testedObject = new A() {
@Override
protected SampleService createSampleService() {
return mockSampleService;
}
}
...
testedObject.methodA();
...
verify(service).retrieveValue();
}

PS:我更喜欢第一个,我认为更改访问修饰符不是最好的方法。

关于java - 如何在 JUnit 中模拟本地对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com