IntelliJ IDEA で次のテストを実行しようとすると、メッセージが表示されます。
「!!! JUnitバージョン3.8以降が必要です。」
これは Android 私がIntelliJで作業しているプロジェクトIDEA 9.であることに注意してください。
public class GameScoreUtilTest {
@Test
public void testCalculateResults() throws Exception {
final Game game = new Game();
final Player player1 = new Player();
{
final PlayedHole playedHole = new PlayedHole();
playedHole.setScore(1);
game.getHoleScoreMap().put(player1, playedHole);
}
{
final PlayedHole playedHole = new PlayedHole();
playedHole.setScore(3);
game.getHoleScoreMap().put(player1, playedHole);
}
final GameResults gameResults = GameScoreUtil.calculateResults(game);
assertEquals(4, gameResults.getScore());
}
}
完全なスタックトレースは次のようになります...
!!! JUnit version 3.8 or later expected:
Java.lang.RuntimeException: Stub!
at junit.runner.BaseTestRunner.<init>(BaseTestRunner.Java:5)
at junit.textui.TestRunner.<init>(TestRunner.Java:54)
at junit.textui.TestRunner.<init>(TestRunner.Java:48)
at junit.textui.TestRunner.<init>(TestRunner.Java:41)
at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.Java:152)
at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.Java:136)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.Java:49)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:110)
Process finished with exit code -3
この問題は、Android Platform(Android.jar
)にすでにJUnitクラスが含まれているために発生します。 IDEAテストランナーはこれらのクラスをロードし、それらが古いJUnitからのものであることを確認しますが、新しいJUnitの機能である注釈付きテストを使用しようとしているため、テストランナーからエラーが発生します。
解決策は簡単です。Project Structure
| Modules
| Dependencies
、junit-4.7.jar
を上に移動して、クラスパスでbeforeAndroid 1.6 Platform
になるようにします。これで、テストランナーは新しいJUnitバージョンをロードできるようになります。
マルチモジュールプロジェクト(libgdx)でこの問題が発生しました。 1つのモジュールは純粋なJavaであり、テストがあります。私の解決策は、単体テストの実行構成で「代替JREを使用」を「Java 1.8」に設定することでした。これにより、クラスパスにAndroid.jarが存在せず、junit 4.xランナーが使用されるようになります。
Android Studio 1.4+でUnit Test
とAndroid Instrument Test
の両方を作成すると同じエラーが発生し、混乱し始めました。このエラーを回避するには、テストクラスがAndroid Tests
のRun/Debug Configurations
に該当することを確認してください
Test Artifact
のBuild Variants
がAndroid Instrumentation Tests
に設定されていることを確認してくださいRun
> Edit Configuration
をクリックしますJUnit
ではなくAndroid Tests
内にあることを確認してくださいJUnit
にある場合は、設定を削除して、テストするファイルを右クリックし、Run
をもう一度クリックします。次に、Android Tests
セクションの下に構成を作成し、デバイス/エミュレーターで実行します。Android Studioの場合- Android Studio 1.1 Beta 4 から開始し、GoogleはAndroidのサポートを追加しました Gradle plugin 1.1.0-RC =。新しいプラグインは、junit 4+を使用したAndroid Studioを介した単体テストをサポートしています。
これはまだ実験的であり、いくつかの 手動手順 があります。
この投稿を読んでいて、AndroidStudio 1.0でも同じ問題を抱えているすべての人に。 AndroidStudioで依存関係の順序を変更することはできません。IDEはそれらを自動的に書き換えます。また、.imlファイルを変更して順序を変更した場合でも、「クラスが見つかりません...」が表示されます。これは、AndroidStudioでテスト出力パスを設定できないためです。
実際、AndroidStudio、Junit、およびRobolectricを連携させるソリューションがあります。これをご覧ください https://github.com/JCAndKSolutions/Android-unit-test このプラグインも使用してください: https://github.com/evant/Android- studio-unit-test-plugin
私にぴったりです。
想像できる2つのことがあります
私は同じ問題を抱えていましたが、別の理由がありました。私はIntelliJで通常のJava gradleプロジェクト(Androidではない)を使用していましたが、JDKはProject Structure
のAndroid SDKに設定されていました(何らかの理由でデフォルトのJDKでした) 。これは本当に馬鹿げていますが、IntelliJは私に何が悪いのかを示すほどニースではなかったので、私はそれで立ち往生しました。
これは私がそれを解決した方法です:
設定の編集->デフォルト-> Android JUnit->次を作業ディレクトリに追加します。
$ MODULE_DIR $
「Androidインストルメンテーション」から「ビルドバリアント」(メインウィンドウの左下隅)の「テストアーティファクト」設定を切り替える必要があることを知らなかったため、Android Studio 1.5でこの問題が発生しました。テスト」から「ユニットテスト」へ。実行すると、プロジェクトウィンドウにExampleUnitTest.Javaファイルが表示されます。
自分のjunitパッケージを作成したときに同じエラーが発生しました
これを修正するため、 here で説明されているように、アプリのgradleファイルに次の2行を追加しました。
dependencies {
...
// Required -- JUnit 4 framework
testCompile 'junit:junit:4.12'
// Optional -- Mockito framework
testCompile 'org.mockito:mockito-core:1.10.19'
}
これはAndroid Studio 1.1でも発生しましたが、プラグインなしで単体テストをサポートする必要があります。
他のマシン(同じプロジェクト、ASの同じバージョン)では、ユニットテストを実行すると、IDEはAndroid.jarファイルをクラスパスに追加しませんが、私のマシンでは追加します。
私の最善の推測は、MavenからGradleへの変換と、intellijからASへの移行により、設定のキャッシュが私のマシンのどこかに残っていたため、Android.jarがクラスパスに追加されたということです。
私がしたことは、私のマシンからすべてのAndroid関連キャッシュをクリアすることです(c:\ users\USRE_NAMEフォルダの下):.Android .AndroidStudio .gradle .m2
その後、プロジェクトを再開し、テストが機能しました。
まだ何がうまくいかなかったかを理解しようとしていますが、今のところこれでうまくいくはずです。
libsフォルダー内のAndroid.jarを最新のものに置き換えます。 こちら からダウンロードできます
Androidプロジェクトでは、minifyEnabled = true
がありましたが、false
に変更した後、すべてが機能しました。
削除する場合
testOptions {
unitTests.returnDefaultValues = true
}
build.gradle
から動作します
Build.gradleに変更した後も、同じ問題に直面していました。
build.gradle内のjunitバージョンを次のように変更します
testImplementation 'junit:junit:3.8'
私の場合、プロジェクト構造/ SDKの場所で「埋め込みJDKを使用する」をオフにすることが役に立ちましたが、そもそも失敗した理由は正確にはわかりません。
CrazyCoderの答えに従いましたが、依存関係に表示されるjunitファイルはありませんでした。 http://www.Java2s.com/Code/Jar/j/Downloadjunitjar.htm からダウンロードし、右側のプラスボタンを押して追加しました。そしてそれは働いた
AndroidStudio Open Project Structure -> SDK Location
で、JDK
の場所を確認し、使用を変更 "埋め込みJDKを使用"して、所有するJDK
を適用してから元に戻すto "Use Embedded JDK"、おそらく動作するでしょう
[プロジェクト構造]-> [プラットフォーム設定]に移動し、SDKを1.8に変更して問題を解決しました。