unit testing中的Android Base64编码和解码返回null

我试图在Android中使用http://developer.android.com/reference/android/util/Base64.html类来解码Base64编码的string。

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"); 

我正在运行Android API 23.1.0

Solutions Collecting From Web of "unit testing中的Android Base64编码和解码返回null"

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

你不能在常规的JUnittesting中使用android.util.Base64,它必须是一个Instrumentationtesting。

但是,如果您真的希望将其作为unit testing,则可以使用Apache Commons Base64类。 将其包含在Gradle构build中:

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

然后略有不同的用法,

  • Base64编码。 encodeBase64String(byte [] binaryData)

  • Base64编码。 decodeBase64(String base64String)

后续o android教程和unit testing笔记,而你只需要unit testing,而不使用一些android库

在你的情况你取决于android.Base64。 我有类似的问题,并从src/test – > src/androidTest移动testing类工作。 这些testing运行在虚拟机或真正的Android设备上。 一开始我没有注意到差异。