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


206

IntelliJ IDEAで次のテストを実行しようとすると、メッセージが表示されます。

「!!! JUnitバージョン3.8以降が必要です:」

これはIntelliJ IDEA 9で取り組んでいるAndroidプロジェクトであることに注意してください。

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

Intellij 9、最新のパッチ。
benstpierre 2010年

私はここにソリューションを持っていますstackoverflow.com/questions/29172698/…–
voronnenok

正直に言って、私はついにIntelliJでAndroidプラグインを使用することに注意を払い、弾丸をかまして最新のAndroid Studioを使用しました。すべて大丈夫
カービィ

Testクラスの名前に「Test」が含まれていない誰かがここに来た場合。「テスト」兄弟を追加する必要があります。クラスに「GameEngine」という名前を付けても同じエラーが発生します。「GameEngineTest」にすることで解決できます。乾杯!
レピナンス

回答:


364

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

解決策は簡単ですProject StructureModules| Dependencies、上に移動しjunit-4.7.jarて、クラスパスの Android 1.6 Platformに来るようします。これで、テストランナーは新しいJUnitバージョンをロードするので満足です。


9
これを人々に気付かせるためだけに、これはそれ以降のバージョンのAndroidではまだ問題です。
Chris.Jenkins、

テストの依存関係の後にandroid提供の依存関係を配置することにより、mavenの問題も解決しました
avianey

18
私はGradleのアンドロイドプロジェクトを持っているrobolectricここに記載されているような用途:peterfriese.de/android-testing-with-robolectricと私はクラスパスに第1回から離れAndroidプラットフォームを移動すると、私は次の例外を取得:Class not found: "com.example.intellijgradletest.MainActivityTest"
ヒース国境

7
依存関係の順序を変更するためのIDEA 14.0.3では、矢印を使用する必要があります。ドラッグアンドドロップは機能しません。
david.perez 2015

4
Android Studioでは、依存関係ファイルは自動生成されます。したがって、上下に移動することはできません。この問題を解決する他の方法はありますか?
iMDroid

35

ここに画像の説明を入力してください

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

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


これは実際に機能し、問題のコンテキストを考えると理にかなっています。
AgentKnopf 2017

私の場合、デフォルトでJunitのJREを変更する必要がありました
Rafael

別の方法:Windows またはWindowsでjdk.table.xmlを編集します。ノードを見つけて、に設定します。また、ノードが両方のファイルパスURLに含まれていることを確認してください。「Android-SDK」をあなたのフォルダ名に合わせてください。~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xmlC:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xml<name value="Android API 28 Platform" /><annotationsPath><root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" /><classPath>platforms/android-28/...
Mr-IDE、

これは私にとってはうまくいきます!デフォルト(Android API 28)から1.8(Java)に変更するだけで機能します。
aiueoH

8

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


実際に1.8を使用する必要はありません。Android SDKに付属していない1.7を選択するだけで十分です。
キングストン2016年

8

Android Studio 1.4以降で両方Unit Testを作成するときに同じエラーが発生Android Instrument Testし、混乱し始めました。このエラーを回避するために、必ずあなたのテストクラスが該当されたメイクをAndroid TestsRun/Debug Configurations

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

4
これは私のために機能しました=> JUnitの場合は、設定を削除し、テストするファイルを右クリックして再度実行します。次に、Android Testsセクションの下に構成を作成し、デバイス/エミュレーターで実行します。
Devendra Vaja

私のためにも働いた。testフォルダからフォルダに移動した後、同じテストを実行しましたandroidTest。これを行った後、Android Studioは実行構成を更新しませんでした
Daniil

5

Android Studio- Android Studio 1.1 Beta 4以降、GoogleはAndroid Gradleプラグイン1.1.0-RCのサポートを追加しました。新しいプラグインは、junit 4+を使用したAndroid Studioによるユニットテストをサポートしています。

これはまだ実験段階であり、これを設定するための手動の手順がいくつかあります


動作しますが、Android Studioにはテストの自動生成設定に関する問題があるため、毎回テストパッケージを再選択して実行設定を修正する必要があります。それ以外の場合、テスト実行中にNullPointerException。
Alfishe 2015

4

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

自分のjunitパッケージを作成すると、同じエラーが発生します

ここに画像の説明を入力してください

これを修正するために、ここで説明するように、これらの2行をアプリグラドルファイルに追加しました

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

1

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

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

1

これはAndroid Studio 1.1でも発生しましたが、プラグインなしの単体テストをサポートするはずです。

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

私の考えでは、MavenからGradleに変換し、intellijからASに移行したため、設定のキャッシュがマシンのどこかに残っていて、android.jarがクラスパスに追加されたと考えられます。

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

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

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


1

Android Studio 1.5でこの問題が発生しました。「Build Variants」(メインウィンドウの左下隅)の「Test Artifact」設定を「Android Instrumentation Tests」から「Unit Tests」に切り替える必要があることを知りませんでした。 」実行すると、プロジェクトウィンドウにExampleUnitTest.javaファイルが表示されます。


1

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


1

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

設定の編集->デフォルト-> Android JUnit->作業ディレクトリに以下を追加:

$ MODULE_DIR $


1

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

古いテスト構成を削除する


0

私が持っていたAndroidプロジェクトではminifyEnabled = truefalseすべてを機能させるように変更しました。


0

削除した場合

testOptions {
    unitTests.returnDefaultValues = true
}

あなたからbuild.gradleそれは動作します


0

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


0

私もbuild.gradleに変更した後、同じ問題に直面していましたが、問題なく機能しています。

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

    testImplementation 'junit:junit:3.8'


0

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


0

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


0

AndroidStudioでOpen Project Structure -> SDK LocationJDK場所を確認し、「Use embedded JDK」の使用を自分のものJDKに変更して適用し、「Use embedded JDK」に戻すと、おそらく機能します


0

私の場合は、変更JREにおけるRun Configurations線量は問題を解決するため、私はテスト機能の隣にある[実行]ボタンをクリックすると、JREオプションがデフォルトにリセットされます。

最後に、@ CrazyLiuの回答と同様に、でProject Structure - SDK Location - JDKを選択しますEmbedded JDK。Android Studio 3.6にはチェックボックスがないためです。


0

同じメッセージを受け取った

JUnit version 3.8 or later expected

単純な初心者の間違いによって。クラス(私の場合はHomeControllerクラス)のsrc / mainとsrc / testで同じパッケージ名とクラス名を使用しました:

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--ApplicationTest.java
          +--controller
            +--HomeController.java  <---- same package and class name: not good!

これにより、src / main HomeControllerクラスとsrc / test HomeControllerクラスは同じ完全パスを持ちました。

com.example.controller.HomeController.class

結果:HomeControllerクラスに依存していたテストはすべて失敗しました。

パッケージ名またはクラス名、あるいはその両方を変更することで、問題は解決しました。以下の例では、パッケージ名とクラス名の両方が変更されています。

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--test                       <---- added (optional)
            +--ApplicationTest.java
            +--controller
              +--HomeControllerTest.java    <---- changed

現在、完全修飾クラス名は異なります。src / main HomeControllerクラス名は次のとおりです。

com.example.controller.HomeController.class

src / test HomeHontrollerTestクラス名は次のとおりです。

com.example.test.controller.HomeControllerTest.class

完全修飾クラス名は一意であるため、問題はなくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.