web-dev-qa-db-ja.com

IntelliJ IDEA with Junit 4.7 "!!! JUnitバージョン3.8以降が必要です:"

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
202
benstpierre

この問題は、Android Platform(Android.jar)にすでにJUnitクラスが含まれているために発生します。 IDEAテストランナーはこれらのクラスをロードし、それらが古いJUnitからのものであることを確認しますが、新しいJUnitの機能である注釈付きテストを使用しようとしているため、テストランナーからエラーが発生します。

解決策は簡単です。Project Structure | Modules | Dependenciesjunit-4.7.jarを上に移動して、クラスパスでbeforeAndroid 1.6 Platformになるようにします。これで、テストランナーは新しいJUnitバージョンをロードできるようになります。

361
CrazyCoder

enter image description here

私のモジュールはJavaライブラリモジュールであるため、JREを1.8 Javaに変更すると問題が解決しました。

または、Android SDKのコピーの代わりにOracleのJDK 8を指定して、[モジュール設定]> [SDKの場所]> [JDK]でグローバルに実行することもできます。

31
alexey polusov

マルチモジュールプロジェクト(libgdx)でこの問題が発生しました。 1つのモジュールは純粋なJavaであり、テストがあります。私の解決策は、単体テストの実行構成で「代替JREを使用」を「Java 1.8」に設定することでした。これにより、クラスパスにAndroid.jarが存在せず、junit 4.xランナーが使用されるようになります。

8
Uwe Post

Android St​​udio 1.4+でUnit TestAndroid Instrument Testの両方を作成すると同じエラーが発生し、混乱し始めました。このエラーを回避するには、テストクラスがAndroid TestsRun/Debug Configurationsに該当することを確認してください

  1. 指示に正しく従っていることを確認してください https://developer.Android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. Test ArtifactBuild VariantsAndroid Instrumentation Testsに設定されていることを確認してください
  3. メニューRun> Edit Configurationをクリックします
  4. クラス/メソッド名がJUnitではなくAndroid Tests内にあることを確認してください
  5. JUnitにある場合は、設定を削除して、テストするファイルを右クリックし、Runをもう一度クリックします。次に、Android Testsセクションの下に構成を作成し、デバイス/エミュレーターで実行します。
6
CallMeLaNN

Android St​​udioの場合- Android Studio 1.1 Beta 4 から開始し、GoogleはAndroidのサポートを追加しました Gradle plugin 1.1.0-RC =。新しいプラグインは、junit 4+を使用したAndroid St​​udioを介した単体テストをサポートしています。

これはまだ実験的であり、いくつかの 手動手順 があります。

5
ZahiC

この投稿を読んでいて、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

私にぴったりです。

4
rontho

想像できる2つのことがあります

  • IDEがエミュレータで直接実行されるAndroid Junitテストを開始しようとすると、Junit4を使用できません。
  • Android jarから提供されたjunitクラスを誤って使用した場合、Android dalvik vmには実際にコンパイルされたクラスしかないため、通常のjvmでは実行できません。
1
Janusz

私は同じ問題を抱えていましたが、別の理由がありました。私はIntelliJで通常のJava gradleプロジェクト(Androidではない)を使用していましたが、JDKはProject StructureのAndroid SDKに設定されていました(何らかの理由でデフォルトのJDKでした) 。これは本当に馬鹿げていますが、IntelliJは私に何が悪いのかを示すほどニースではなかったので、私はそれで立ち往生しました。

1
Winter

これは私がそれを解決した方法です:

設定の編集->デフォルト-> Android JUnit->次を作業ディレクトリに追加します。

$ MODULE_DIR $

1
liminal

「Androidインストルメンテーション」から「ビルドバリアント」(メインウィンドウの左下隅)の「テストアーティファクト」設定を切り替える必要があることを知らなかったため、Android St​​udio 1.5でこの問題が発生しました。テスト」から「ユニットテスト」へ。実行すると、プロジェクトウィンドウにExampleUnitTest.Javaファイルが表示されます。

1
ScarOnTheSky

私にとって、この問題は、テストの実行構成が古い/壊れていることが原因でした。構成を削除し、新しい構成を作成するだけで問題は解決しました。

Delete the old test configuration

1
shocking

自分のjunitパッケージを作成したときに同じエラーが発生しました

enter image description here

これを修正するため、 here で説明されているように、アプリのgradleファイルに次の2行を追加しました。

dependencies {
    ...
    // Required -- JUnit 4 framework
    testCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    testCompile 'org.mockito:mockito-core:1.10.19'
}
1
Kevin ABRIOUX

これはAndroid St​​udio 1.1でも発生しましたが、プラグインなしで単体テストをサポートする必要があります。

他のマシン(同じプロジェクト、ASの同じバージョン)では、ユニットテストを実行すると、IDEはAndroid.jarファイルをクラスパスに追加しませんが、私のマシンでは追加します。

私の最善の推測は、MavenからGradleへの変換と、intellijからASへの移行により、設定のキャッシュが私のマシンのどこかに残っていたため、Android.jarがクラスパスに追加されたということです。

私がしたことは、私のマシンからすべてのAndroid関連キャッシュをクリアすることです(c:\ users\USRE_NAMEフォルダの下):.Android .AndroidStudio .gradle .m2

その後、プロジェクトを再開し、テストが機能しました。

まだ何がうまくいかなかったかを理解しようとしていますが、今のところこれでうまくいくはずです。

1
Yossi Shmueli

libsフォルダー内のAndroid.jarを最新のものに置き換えます。 こちら からダウンロードできます

0
Dharak Bhatt

Androidプロジェクトでは、minifyEnabled = trueがありましたが、falseに変更した後、すべてが機能しました。

0
Przemo

削除する場合

testOptions {
    unitTests.returnDefaultValues = true
}

build.gradleから動作します

0
Chiara

Build.gradleに変更した後も、同じ問題に直面していました。

build.gradle内のjunitバージョンを次のように変更します

    testImplementation 'junit:junit:3.8'
0
Abdul Rizwan

私の場合、プロジェクト構造/ SDKの場所で「埋め込みJDKを使用する」をオフにすることが役に立ちましたが、そもそも失敗した理由は正確にはわかりません。

0

CrazyCoderの答えに従いましたが、依存関係に表示されるjunitファイルはありませんでした。 http://www.Java2s.com/Code/Jar/j/Downloadjunitjar.htm からダウンロードし、右側のプラスボタンを押して追加しました。そしてそれは働いた

0
Ayman Harake

AndroidStudio Open Project Structure -> SDK Locationで、JDKの場所を確認し、使用を変更 "埋め込みJDKを使用"して、所有するJDKを適用してから元に戻すto "Use Embedded JDK"、おそらく動作するでしょう

0
CrazyLiu

[プロジェクト構造]-> [プラットフォーム設定]に移動し、SDKを1.8に変更して問題を解決しました。

0
Lin W