Android 仪器测试因 RenderScript 而失败
Android instumentation tests fail because of RenderScript
我正在ui使用 Espresso 进行一些 ui 测试,一切正常,直到我访问应用程序中的视图,其中 RenderScript 用于模糊图像。
测试失败并出现错误:
java.lang.IllegalAccessError: Class ref in pre-verified class resolved
to unexpected implementation
从我用谷歌搜索的情况来看,这似乎是因为在测试应用程序中有 2 个相同 class 的实例,并且大多数解决方案都暗示问题可能是添加的 guava
库两次。但这不是我的情况,因为它在实例化 RenderScript 的代码行上非常明显地失败了。
你有过类似的经历吗?我会很感激任何 gui 舞蹈。
好的,所以我使用了一些技巧来解决这个问题。
hack 是在 androidTest->java->com
中有一个标志 class(可以为空)(位置并不特别,但对于成为 androidTest
的一部分很重要)。
像这样:
public class TestsRunningFlag {
}
然后有一个实用程序方法来检查 class 是否可以加载。
/**
* A hacky way to determine whether the application is running normally,
* or as part of an instrumentation test.
*/
public static boolean isTestMode(Context context) {
boolean result;
try {
context.getClassLoader().loadClass("com.TestsRunningFlag");
result = true;
} catch (final Exception e) {
result = false;
}
return result;
}
然后根据我是否处于测试模式,我是否使用RenderScript处理图像。
我正在ui使用 Espresso 进行一些 ui 测试,一切正常,直到我访问应用程序中的视图,其中 RenderScript 用于模糊图像。
测试失败并出现错误:
java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
从我用谷歌搜索的情况来看,这似乎是因为在测试应用程序中有 2 个相同 class 的实例,并且大多数解决方案都暗示问题可能是添加的 guava
库两次。但这不是我的情况,因为它在实例化 RenderScript 的代码行上非常明显地失败了。
你有过类似的经历吗?我会很感激任何 gui 舞蹈。
好的,所以我使用了一些技巧来解决这个问题。
hack 是在 androidTest->java->com
中有一个标志 class(可以为空)(位置并不特别,但对于成为 androidTest
的一部分很重要)。
像这样:
public class TestsRunningFlag {
}
然后有一个实用程序方法来检查 class 是否可以加载。
/**
* A hacky way to determine whether the application is running normally,
* or as part of an instrumentation test.
*/
public static boolean isTestMode(Context context) {
boolean result;
try {
context.getClassLoader().loadClass("com.TestsRunningFlag");
result = true;
} catch (final Exception e) {
result = false;
}
return result;
}
然后根据我是否处于测试模式,我是否使用RenderScript处理图像。