首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试基本单元

单元测试基本单元
EN

Stack Overflow用户
提问于 2017-04-25 09:24:02
回答 2查看 1.9K关注 0票数 0

我有一些问题,单位测试我的认证方法。这是我的方法:

代码语言:javascript
复制
    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_;
}

这是我的测试代码:

代码语言:javascript
复制
@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

代码语言:javascript
复制
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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-25 12:41:04

实际上,您错过了expect,所以:

代码语言:javascript
复制
Base64.encode(basicAuth.getBytes(),Base64.NO_WRAP)

返回null,这解释了为什么字符串的构造函数抛出NPE。

您还应该查看文档,特别是当您使用模拟和不使用时应该使用重放和验证(这意味着您没有测试是否调用了模拟):https://github.com/powermock/powermock/wiki/MockStatic

票数 0
EN

Stack Overflow用户

发布于 2017-04-25 09:33:01

真正的答案是:您不应该编写太难的代码,以至于您需要PowerMock来测试它。

意义:通过使用静态,您创建了硬测试代码。相反:学习如何编写易于测试的代码(例如,启动这里 )。

然后重构您的代码,以避免静态调用;例如,通过将encode()方法封装到一个微小的包装器接口中(顺便说一下,您仍然可以使用这些静态方法实现接口)。

如前所述,真正的答案是避免模拟静态调用,从而避免对PowerMock的需求。除此之外,用PowerMock模拟静态调用很好;您只需遵循PowerMock人员所概述的确切的食谱即可。

要弄清楚这一点:您仍然需要查看解决方案的具体细节;因为用户Charlesworth已经预测了代码中的下一个NPE问题(他通常都注意到了)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43606605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档