我试图为下面的代码编写单元测试,但遇到了困难。请帮忙。我不知道如何编写测试,尤其是关于返回void的方法,比如addidentity()和connect()。我正在使用mockito和powermockito框架。
public class A {
public method1() {
//some code here
method2();
//more code here
}
private void method2() {
JSch jsch = new JSch();
Session jschSession = null;
try {
jsch.addIdentity("key");
jschSession = jsch.getSession("userID", "somedomain", 22);
//jsch code
}
}
}
我的测试是这样的:
@Test
public void my_Test() throws JSchException {
A test = new A();
JSch mockJsch = Mockito.mock(JSch.class);
whenNew(JSch.class).withNoArguments().thenReturn(mockJsch);
test.method1();
}
1条答案
按热度按时间q3qa4bjr1#
嘲笑
JSch
不会帮助您使用当前的实现,因为您使用“始终创建的新示例”JSch
与new
. 这样你现在就没有机会通过模拟版本的JSch
从外面。更好的方法是传递
JSch
作为A
. 这使您可以灵活地传递JSch
测试时。对于运行时,您可以使用依赖注入框架(例如,spring或jakarta ee/microfile/quarkus的cdi)来获得注入的示例(在您声明一个示例之后)。你可以重构你的类
A
如下所示:然后你可以传递一个
Jsch
去你的测试班(A
)并完全控制Jsch
```@Test
public void my_Test() throws JSchException {
JSch mockJsch = Mockito.mock(JSch.class);
A test = new A(mockJsch);
when(mockJsch.getSession("", "").thenReturn(yourSession);
test.method1();
}