【发布时间】:2018-01-03 18:34:43
【问题描述】:
我在存根 final 方法时遇到问题,该方法在我要测试的类中使用。我的测试类中有问题的行在这里:
PowerMockito.when(connectionMock.authUser("fake-user", "fake-password")).thenReturn("random string");
抛出 NullPointerException。我的测试类如下所示:
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class, APIClientConnection.class})
public class MyClassTest {
@Test
public void apiConnect() throws Exception {
MyClass c = new MyClass();
APIClientConnection connectionMock = PowerMockito.mock(APIClientConnection.class);
PowerMockito.whenNew(APIClientConnection.class).withAnyArguments().thenReturn(connectionMock);
PowerMockito.when(connectionMock.authUser("fake-user", "fake-password")).thenReturn("random string");
c.apiConnect("fake-host", 80, "fake-user", "fake-password");
}
}
我正在测试的类如下:
public class MyClass {
public MyClass() { }
public APIClientConnection apiConnect(String host, int port, String user, String pass) {
conn = new APIClientConnection(host, port);
conn.authUser(user, pass);
}
}
其中 authUser() 的最终定义如下:
public class APIClientConnection {
public final String authUser(String username, String password) {
...
}
}
我正在关注 How to mock non static methods using PowerMock 和 Can Powermockito mock final method in non-final concrete class?。我尝试了一些变体,例如使用 Mockito 而不是 PowerMock 来存根 authUser,并将 APIClientConnection.class 添加到 PrepareForTest 注释中。我不知道为什么它不起作用。我做错了什么?
【问题讨论】:
标签: java unit-testing mockito powermock powermockito