私は毎日、Eclipse 内から Android 以外の JUnit テストを実行しています。今日は、Android ライブラリ クラスのいくつかをテストしたいと思いました。ああ、痛み。
Android-maven-plugin を使用した Android ライブラリ プロジェクトがあります。にソース ファイルがsrc/main/java
あり、(新しい) 単体テストが にありsrc/test/java
ます。私のPOMには、適切なJUnit依存関係とandroid-maven-plugin参照があります。
からAndroidUri
インスタンスを作成することがありますFile
。から作成した既存の JavaURI
インスタンスを にFile
変換することがありUri
ます。私はファイルと URI に関して Java も Android も信頼していないので (Java が URI の UNC パスをどのように壊すのか、または Javaequals()
が URI のコントラクトをどのように壊すのかについて始めないでください)、一時ファイルを作成するための簡単な単体テストを作成したいと思いました。 、 Uris
2 つの異なるアプローチから作成し、それらが等しくなるようにします。
そこで、慣れ親しんだように小さな 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 でローカルに単体テストを実行できることを読みました。これがここで行っていることです。では、どうやってそれをやってのけるのですか?