我每天都在 Eclipse 中运行非 Android JUnit 测试。今天我想测试我的一些 Android 库类。哦,痛苦。
我有一个使用 android-maven-plugin 的 Android 库项目。我有源文件src/main/java
,我的(新)单元测试在src/test/java
. 我的 POM 具有适当的 JUnit 依赖项和 android-maven-plugin 引用。
有时我会Uri
从File
. 有时我有一个现有的 JavaURI
实例,该实例是从 a 创建的File
,然后我将其转换为Uri
. 由于我既不信任 Java 也不信任 Android 的文件和 URI(不要让我开始了解 Java 如何破坏 URI 中的 UNC 路径,或者 Java 如何破坏equals()
URI 中的合同),我想创建一个简单的单元测试来创建一个临时文件,Uris
从两种不同的方法创建,并确保它们相等。
所以我像以前一样做了一个小的 JUnit 单元测试,并尝试在 Eclipse 中使用Ctrl+F11
. Eclipse 询问我这是“Android JUnit 测试”还是“JUnit 测试”。好吧,显然是Android。所以我选择第一个选项并得到:
[2013-03-23 21:37:10 - mylib] ------------------------------
[2013-03-23 21:37:10 - mylib] Android Launch!
[2013-03-23 21:37:10 - mylib] adb is running normally.
[2013-03-23 21:37:10 - mylib] Could not find mylib.apk!
嗯……那不是很成功。所以我删除了运行配置并尝试“JUnit Test”。现在我得到一个不同的对话框,要求我选择我喜欢的启动器,“Android JUnit Test Launcher”或“Eclipse JUnit Test Launcher”。我选择哪个并不重要;我得到:
Class not found com.example.MyUnitTest
java.lang.ClassNotFoundException: com.example.MyUnitTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
我已经阅读了 android-maven-plugin,如果他们只使用 Android jar 中的类但不进行任何 API 调用,我可以在 Eclipse 中本地运行单元测试,这就是我在这里所做的。那我该怎么做呢?