PowerMockito.when(connectionMock.authUser("fake-user", "fake-password")).thenReturn("random string");
@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()定义为final,如下所示:
public class APIClientConnection {
public final String authUser(String username, String password) {
...
}
}
我正在学习如何使用PowerMock模拟非静态方法,以及Powermockito是否可以模拟非final具体类中的final方法?。我尝试了一些变体,例如使用Mockito而不是PowerMock来存根authUser,以及将apiclientconnection.class添加到PrepareForTest注释中。我不明白为什么它不起作用。我做错了什么?
你的问题就在这里
PowerMockito.when(connectionMock.authUser("user", "password")).thenReturn("random string");
c.apiConnect("fake-host", 80, "fake-user", "fake-password");
您指示,当用户使用凭据user/password
登录时,应该停止该方法,但您发送的是fake-user/fake-password
。
将最后一行替换为c.apiconnect(“fake-host”,80,“user”,“password”);
我目前正试图模拟类中的私有final static对象。我的目标似乎没有被恰当地模仿。 示例: 代码:在主类中 嘲笑:在我的测试课上,我有 但是obj不返回我在执行时指定的值 并将实际运行。 任何建议都将是有帮助的,我也不能改变Main类中的任何代码,谢谢。
我试图使用PowerMockito在我正在测试的代码中模拟java.net.URL类的创建。基本上,我希望防止真正的HTTP请求发生,而是1)在请求发出时检查数据,2)在模拟响应中提供我自己的测试数据。这就是我正在尝试的: 我要测试的代码如下所示: 在前面的测试场景中,我模拟了wlInvokeUrlString以匹配“MyURLString”。我还尝试使用whenNew行的各种其他形式,尝试注入模
我试图在测试的类中模拟一个私有方法,如下所示。 现在我需要测试方法和mock。 我尝试创建间谍的上述类,但该方法得到调用时,我这样做下面 在第二行本身被调用。而且,不会被模仿。 也许我用错误的方式创建了间谍对象?无法执行