Android Base64 编码和解码在单元测试中返回 null

我正在尝试使用 http://developer.android.com/reference/android/util/Base64.html 类在Android中解码Base64编码的字符串。

encodeToString和decode方法都返回null,我不知道出了什么问题,这是我的解码代码:

// Should decode to "GRC"
String friendlyNameBase64Encoded = "R1JD";

// This returns null
byte[] friendlyNameByteArray = Base64.decode(friendlyNameBase64Encoded, Base64.DEFAULT);

// Fails with NullPointerException
String friendlyName = new String(friendlyNameByteArray, "UTF-8");

我运行的是安卓 API 23.1.0


答案 1

我在单元测试中遇到了同样的问题。我没有意识到我使用的Base64类是Android API的一部分,因此

你不能在常规的JUnit测试中使用android.util.Base64,它必须是一个工具测试。

但是,如果你真的想把它作为一个单元测试,你可以改用Apache Commons Base64类。将其包含在 Gradle 构建中:

// https://mvnrepository.com/artifact/org.apache.commons/commons-collections4
compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.1'

然后用法略有不同,


答案 2

您可以使用机器人跑步者

  1. 在以下位置添加依赖项:build.gradle

    testCompile 'org.robolectric:robolectric:X.X.X'
    
  2. 在测试类中添加此行:

    import org.junit.runner.RunWith;
    import org.robolectric.RobolectricTestRunner;
    
    @RunWith(RobolectricTestRunner.class)
    public class MyTestingClassTest {
        ...
    }
    

推荐