我有一些问题,单位测试我的认证方法。这是我的方法:
public int basicAuth(String username, String password) throws IOException {
connection = (HttpURLConnection)new URL("URL").openConnection();
connection.setRequestMethod("GET");
String basicAuth = username + ":" + password;
String wrap = "Basic " + new String(Base64.encode(basicAuth.getBytes(),Base64.NO_WRAP));
connection.setRequestProperty("Authorization",basicAuth);
connection.connect();
//InputStream in = connection.getInputStream();
int response = connection.getResponseCode();
Log.v("Reponse HTTP : ", String.valueOf(response));
responseCode_ = connection.getResponseCode();
return responseCode_;
}这是我的测试代码:
@Test
public void basicAuth() throws Exception {
PowerMockito.mockStatic(Base64.class);
String username = "username";
String password = "password";
int responseCode = 200;
int integer = auth.basicAuth(username, password);
assertEquals(responseCode, integer);
}我使用Powermock是因为我在使用Base64时有一个错误,这个错误没有被模仿。现在,当我使用Powermock时,我遇到了以下错误:
com.example.local.app_android.Authentification.basicAuth(Authentification.java:96) at com.example.local.app_android.AuthentificationTest.basicAuth(AuthentificationTest.java:34) /./ java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
(我把错误的中间部分剪掉了)
有人知道错误的来源吗?
编辑N°1
testCompile 'org.powermock:powermock-api-mockito:1.6.1'
testCompile 'org.powermock:powermock-module-junit4-rule-agent:1.6.1'
testCompile 'org.powermock:powermock-module-junit4-rule:1.6.1'
testCompile 'org.powermock:powermock-module-junit4:1.6.1'
testCompile 'org.mockito:mockito-core:1.10.19'发布于 2017-04-25 12:41:04
实际上,您错过了expect,所以:
Base64.encode(basicAuth.getBytes(),Base64.NO_WRAP)返回null,这解释了为什么字符串的构造函数抛出NPE。
您还应该查看文档,特别是当您使用模拟和不使用时应该使用重放和验证(这意味着您没有测试是否调用了模拟):https://github.com/powermock/powermock/wiki/MockStatic
发布于 2017-04-25 09:33:01
真正的答案是:您不应该编写太难的代码,以至于您需要PowerMock来测试它。
意义:通过使用静态,您创建了硬测试代码。相反:学习如何编写易于测试的代码(例如,启动这里 )。
然后重构您的代码,以避免静态调用;例如,通过将encode()方法封装到一个微小的包装器接口中(顺便说一下,您仍然可以使用这些静态方法实现接口)。
如前所述,真正的答案是避免模拟静态调用,从而避免对PowerMock的需求。除此之外,用PowerMock模拟静态调用很好;您只需遵循PowerMock人员所概述的确切的食谱即可。
要弄清楚这一点:您仍然需要查看解决方案的具体细节;因为用户Charlesworth已经预测了代码中的下一个NPE问题(他通常都注意到了)。
https://stackoverflow.com/questions/43606605
复制相似问题