我写这条消息,因为我面临着我的android单元测试的问题,我需要你的帮助,请。
实际上,在我的Android应用程序中,我使用了一个从jar文件导入的模块(对象):
- 我在我的/project/libs中有一个toto.jar(例如/project/libs/toto. jar)
- 在我的build.gradle中,我有这两行代码来导入jar文件:
API fileTree(dir:“libs”,include:["*.jar”])
实现fileTree(包括:文件“*. so”],目录:“jniLibs”)
- 在我的MainActivityHelper中,我将库的类导入到:
import com.toto.library.myClass
字符串
然后我在一个方法中这样使用它
var myClass: MyClass = MyClass()
myClass.doSomething()
型
在我的单元测试文件中,我试图模仿它:
@Mock
private var mockMyClass: myClass? = null
型
当我尝试运行我的测试时,我总是得到这个错误:
java.lang.UnsatisfiedLinkError: no <library-name> in java.library.path
型
我可以看到库中有一个试图加载库的文件,可能它产生了此错误消息
static {
try {
System.loadLibrary("toto");
} catch (NoClassDefFoundError var1) {
}
}
型
但即使在搜索了许多其他线程,并尝试了其他解决方案后,我不明白如何使我的jar文件可用于我的单元测试。
实际上我的单元测试文件在:/home/username/AndroidStudioProject/project-name/src/test/java/com/my/package
我的jar文件在:/home/username/AndroidStudioProject/project-name/libs
其他一些链接到jar文件(toto.jar)的“.so”(例如tata.so文件)位于:/home/username/AndroidStudioProject/project-name/src/main/jniLibs
我的应用程序项目文件在:/home/username/AndroidStudioProject/project-name/src/main/java
请问有没有什么方法可以让它在单元测试编译时知道jar库文件在libs文件夹中?我在build.gradle中有什么可以修改的吗?(比如testOptions?)
提前感谢您的帮助!
2条答案
按热度按时间cpjpxq1n1#
Original Post Here
更新robolectric工程为我:
字符串
还有:
型
zwghvu4y2#
最后我找到了解决方案,分享给大家:
1.为了让测试像在真实的设备上一样工作,您必须使用instrumented test(Android Runner)进行测试
1.你必须把所有的测试文件放在androidTest目录下,否则你的仪器测试将无法工作
字符串
1.添加依赖项,请检查是否需要更新版本号
型
1.在上面添加测试类名声明:
型
1.在特殊情况下:如果你想模拟一个从外部.jar库导入的对象(类),并且你有该库的外部.so文件,也许你必须检查是否有不同的.so文件用于不同的体系结构==>
例如,你有一些.so文件在你的jniLIbs文件夹/src/main/jniLibs/armeabi-v7 a/.so也许对于你的主应用程序armeabi-v7 a就足够了,但是对于instrumented单元测试单元,你需要其他的架构,所以只需要添加库提供商提供的所有文件夹和.so文件:在加上armeabi-v7 a中,你还将有:那些文件夹armeabi,x86,x86_64等。
那你的测试就通过了