如何解决如何测试在构造函数中初始化的java类
我有一个 java 类,它的构造函数看起来像这样
private SomeManager someManager;
public MyService() {
this.someManager = ManagerHandler.getDefault();
}
问题是,虽然测试 ManagerHandler 没有初始化,所以我无法创建这个类的新对象来测试它的方法。我正在使用 mockito 进行测试。我无法理解如何模拟我没有在构造函数中传递的参数。
无论如何我可以使用 PowerMock 模拟 someManager 吗?
解决方法
您可以使用 InjectMocks
注释。见下例:
MyService
类:
public class MyService {
ManagerHandler someManager;
public MyService() {
this.someManager = ManagerHandler.getDefault();
}
// other methods
public String greetUser(String user) {
return someManager.sayHello(user) + ",Good Morning!";
}
}
ManagerHandler
类:
public class ManagerHandler {
public static ManagerHandler getDefault() {
return new ManagerHandler();
}
public String sayHello(String userName) {
return "Hello " + userName;
}
}
TestClass
:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class TestClass {
@Mock
ManagerHandler someManager;
@InjectMocks
MyService myService = new MyService();
@Test
public void test() {
//mock methods of ManagerHandler
Mockito.when(someManager.sayHello("Alice")).thenReturn("Hello Alice");
assertEquals("Hello Alice,Good Morning!",myService.greetUser("Alice"));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。