テストランナー「JUnit 4」でテストが見つかりません


105

私のJavaテストはEclipseからうまく機能しました。しかし今、実行メニューからテストを再起動すると、次のメッセージが表示されます。

No tests found with test runner 'JUnit 4'

.classpathファイル私はすべて持っているjarファイルを、そして最後にあります。

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

このエラーを解決してテストを再度実行するにはどうすればよいですか?


1
テストの内容(または少なくともクラス宣言)を投稿できますか?また、「最後に持っている:」を他に何も書かずに書きました。
phtrivier 2010

これをチェックする...それが役立つはず stackoverflow.com/questions/22469480/junit-no-tests-found
プラサドVSV

以下のためのJUnit 5参照ここに
アナンドRockzz

回答:


155

これはちょうど私に起こりました。Eclipseの再構築または再起動は役に立ちませんでした。

テストメソッドの1つを「test ...」(JUnit3スタイル)で始まる名前に変更することで解決し、すべてのテストが見つかりました。以前の名前に戻しましたが、引き続き機能します。


7
私のような方法で持ってtestQuotesテストを開始するが、それでも私はテストがエラーを発見し得ることはありません他の方法と一緒に
レイチェル

1
私が拡張するクラスにも同じ問題がjunit.framework.TestCaseあり、私のメソッドは「テスト」で始まる必要がありました。を拡張するのTestCaseではなく、私はimport:を追加しましたimport static org.junit.Assert.*;。メソッドに好きな名前を付けることができます。奇妙な...
MrDrews 2013

6
真剣に、テストに@Testアノテーションが付けられている場合でも、テスト関数名の前に「test」を付ける必要がありますか?
ブライアンショットラ

4
2015とEclipse Lunaをこのリストに追加することもできます。実際、私の@Testメソッドの多くは、接頭辞「test」で始まっています。1つのテストでそのプレフィックスを削除して保存すると、すべてのテストが見つかりました。その後、私はそれを再び追加し、すべてのテストが引き続き見つかりました。Eclipseがすべてを再発見するように、メソッド(ファイル?)を変更することのほうが重要なようです。
ブライアンホワイト

2
Android Studio 2.1.1(2016年5月)は引き続き機能します。この答えは宇宙の終わりまで機能するのだろうか。
Blueriver 2016年

42

これらのエラーが発生した場合、Eclipseは混乱しているようです。Eclipseを再起動し、プロジェクトを更新してクリーンアップし、Eclipseに再ビルドさせて、再試行します。ほとんどの場合、それは魅力のように機能します。


1
うんも私のために働き、dlamblinに同意します。提案の最初の5分間で解決できない奇妙な問題がある場合は、常に再起動を試みることをお勧めします。
ティエン、

3
私はこの問題を抱えていたので、テストクラスを定義したソースファイルを閉じ、ナビゲーターでそのファイルをダブルクリックしました。そのため、Eclipseを再起動することなく、ファイルを閉じて再度開くことができました。
メタマット

11
これは本当に私に新しいIDEを探しさせます。これは私のために働いた。
セスM.

1
プロジェクトを閉じて再開すると、修正されました!
マーティンチャールズワース2013年

34

'test'ディレクトリのコンテキストメニューで、[ビルドパス]-> [ソースフォルダーとして使用]を選択します。EclipseはunitTests.javaファイルをソースファイルとして認識します。「build」ディレクトリにunitTests.classファイルがないため、「JUnitテストが見つかりません」という警告が表示されます


これは私にとって有効な解決策です。再起動は機能しません。
Andree

これは、「src」フォルダではなく「test」フォルダを作成する必要があるためです。私はこれを行い、他の回答で提案されているようにプロジェクトを開いたり閉じたりしました。今では、JUnitテストとしてコンパイルおよび実行されます。ありがとう!
quux00

プロジェクト-> Javaビルドパス->ソース->テストフォルダを追加することで同じことを行いました。どうもありがとう!
Peter Clause 14

src / test / groovyが既にソースパスとしてビルドパスにある場合は、それを削除してから再度追加します。すべてのテストファイルで@Testを削除して置き換えるよりも簡単です...
geneSummons

32

テストクラスが「TestCase」を拡張しているかどうかを確認します。その場合は、その句を削除してください。クラスは「TestCase」クラスから拡張する必要はありません。私が出会ったほとんどのケースです。

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

次のTestCaseは問題ありません。

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine

それは確かに正しい答えです。IntelliJとJUnit 4.1でテストしましたが、動作します!
Dio Phung 2014年

私が直面している問題は、EclipseでJUnitテストが正常に実行されることですが、JARテストをJARにエクスポートすると、上記のエラーが発生します。何か案は?
tryToLearn 2016

最近では逆ですか?「TestCaseを拡張する」を追加すると、問題が解決しました。
Heinzlmaen

私のために働きました!!! ありがとう
JRichardsz

27

私は同じ問題に直面していて、ウェブの悪い例とjunitの内部にそれをデバッグしました。Junit 4.xのいくつかの例が示すように、基本的にクラスにTestCaseを拡張させないでください。いくつかの命名規則Testを使用するか、アノテーションが必要な場合は、@ RunWith(JUnit4.class)を使用できます。

assertメソッドにアクセスする必要がある場合は、Assertを拡張するか、静的インポートを使用します。

クラスがTestCaseを拡張する場合、Junit 4 Runnerを使用しても、3として実行されます。これは、初期化コードに検出があるためです。

JUnit3Builderと次の行を参照してください。

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

これはtrueを返し、junit4互換性のテストは試行されません。


2
これで問題は解決しました。Junitの使用方法の古い例を最初に見ている場合、それらはあなたを迷わせます。
Alex Kilpatrick、2011

「クラスがTestCaseを拡張する場合、Junit 4 Runnerを使用しても3として実行されます」-これは当てはまりません(少なくともGroovyおよびIntellij IDEAの場合)。私はJUnit 4.12を使用して@RunWith(JUnit4)おり、「GroovyTestCase」でクラスに注釈を付けて拡張しています。なしで@RunWith(JUnit4)私は同じ問題に直面します。
Veaceslav Gaidarji 2017年

動作は2017(JUnit 4.12)と同じです。
sharmaap 2017


5

さらに別の解決策としてリングに投入します。エディターウィンドウからもパッケージエクスプローラーからもテストクラスを実行できませんでしたが、アウトラインビューでクラス名を右クリックし、[JUnitとして実行]を選択します。テストはうまくいきました...


同じように、概要ビューからは機能しますが、それ以外は機能しません-3つのスタックオーバーフロースレッドに投稿されたすべてのソリューションを試しましたが、何も機能しません
MPSL

これは私にとっても機能しますが、プロジェクト全体のカバレッジをテストするのには役に立ちません。
リッチ

4

JUnit4にはテストスイートはありません。代わりにアノテーションを使用するか、古いJUnit3の命名規則を使用してください。

例:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})

4

これは私にも起こりました。Eclipseを再起動してみて、テストメソッドの前にテストを追加しました。どちらもうまくいきませんでした。

次のステップが機能しました。@ BeforeClassおよび@AfterClassにあるすべてのテストメソッドを静的メソッドに変更します。

つまり、以下の形式のテストメソッドがある場合:

@BeforeClass
public void testBeforeClass(){
}

次に、次のように変更します。

@BeforeClass
public static void testBeforeClass(){
}

これでうまくいきました。


4

私は答えを見つけました:

Eclipseからスタンドアロンでテストを実行したときにこのエラーが発生しました(メソッドを右クリックしてjunitテストとして実行することを選択)、

完全なクラスをjunitテストとして実行すると、テストはパラメーターを使用して正しく実行されました。


3

この問題に直面したときは、ファイルを編集して保存します...魅力のように機能します


1
こんにちは、メイト、Stackoverflowへようこそ!:)答えを詳しく説明していただけませんか?
Littm 2012年

@Maheshつまり、ファイルを更新します(ファイルを選択してF5キーを押します)
Cassian

私はscalaから同じ問題に直面しています。つまり、私のテストはJUnit4用に書かれていますが、それらはscalaにあります。そして、@ Maheshが示唆するように、解決策はコンパイラにキックを与えることです。ファイルを編集するときに何をするかは関係ありません。編集するだけです。構文エラーが発生するものを入力し、ファイルを保存してから、元に戻し、再度保存します。突然私のテストが実行されます。これは頻繁に、つまり少なくとも毎日、通常は1日に複数回発生します。
エリックG.ハグストロム2015年

3

私の問題は、宣言import org.junit.Test;が消えた(または追加されなかった)ことです。それを追加した後、別のimport宣言を削除する必要があり(Eclipseがどちらを示唆するか)、すべてが再び機能し始めました。


3

非常に遅いですが、問題を解決したのは、私のテストメソッド名がすべて大文字の「public void Test」で始まっていることです。小文字にすることでうまくいきました。


これは私にとっては
うまくいき

2

ジェルマンの解決策を試しました。それは私のクラスのすべてのメソッドで機能しましたが、プロジェクトには多くのクラスがあります。

だから私はビルドパスから削除してから再度追加してみました。それは完全に機能しました。

それが役に立てば幸い。


2

6年後...そしてEclipseにはまだ問題があり、時々JUnitsが見つからないことがあります。

私のEclipse Mars 2 @Testで、ファイルに9または10を超えるアノテーションがある場合、gitからプルされたテストクラスを認識しないことを発見しました。追加のテストをコメント化し、テストクラスを実行してから、コメントを外してクラスを再実行する必要があります。図に行く...


ここでのこの回答は役に立ちます。私はまったく同じ状況ではありませんでしたが、テストメソッド名は非常に類似しており、Eclipseはそれらを見つけるのに問題がありました。testCase01のように、testCare02 ... testCase01を実行するために他の「testCasexx」メソッドにコメントする必要がありました。そうしないと例外がスローされます。すべてのテストメソッドをPUBLICにすると、この問題は解決したようです。
01000001

1

JUnit起動構成が個々のテストクラス用である可能性があり、その構成を「ソースフォルダー、パッケージ、またはプロジェクト内のすべてのテストを実行する」ように変更した可能性があります

しかし、「テストランナー 'JUnit 4'でテストが見つかりませんでした」というエラーメッセージが表示される可能性があります。

または、@Testアノテーションを削除して、テストクラスに変更を加えました。
このwikiページを参照してください


@Test is here、message is:could not faind main class toto.lolo.testrunner(specified in the run configuration)
user281070

@lamisse:だから、クラスパスの問題の一種ですか?またはsyntexの問題:あるべきでtoto.lolo.Testrunnerありそうでないtoto.lolo.testrunner( 'T')
VonC '25

@lamisse: "toto.lolo.Testrunner"はTestRunnerクラスの実際の名前ですか?あなたが書いたものですか?起動構成のクラスパスにプロジェクト/ jarが含まれていますか?
phtrivier 2010

1

JUnitテストの実行中にも同じ問題に直面しました。これを解決するには、メインのテスト関数のすぐ上に@Testアノテーションを配置します。


1

私のケースを修正したのは、@ JamesGの答えに似ていました。Eclipseを再起動し、プロジェクトを再ビルドして、更新しました。しかし、それを行う前に、最初にプロジェクトを閉じ(パッケージエクスプローラーでプロジェクトを右クリックして、[プロジェクトを閉じる])、それを再度開きました。その後、うまくいきました。

先ほど説明した最終的なソリューションを見つける前に見つけた回避策:テストクラスをコピーし、JUnitとしてテストクラスを実行します。


1

テストがあるフォルダーがソースフォルダーであるかどうかを確認します。そうでない場合-右クリックしてソースフォルダとして使用します。



1

別の可能性もあります。JunitTestを下位バージョン(Junit 3など)からJunit 4に変更した可能性があります。以下の手順に従ってください:-

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.

1

@Testテストの上に追加します。
注釈にマウスを合わせます。
「JUnit 4ライブラリをクラスパスに追加」を選択しました


0

EclipseプロジェクトはMavenベースですか?その場合は、m2eclipseのバージョンを更新する必要があります。

簡単なメモ:私はEclipseにmavenベースのプロジェクトがあり、Eclipseの「新しいmavenプロジェクト」ウィザードを使用して最初に生成しました。私はユニットテストにJUnit 4.5を使用しており、mavenを使用してコマンドラインからテストを実行でき、Eclipseから個別のテストをrun as JUnitテストを使用して実行できます。しかし、すべてのテストを実行しようとしたときプロジェクトのルートノードでrun as JUnit test ...を呼び出すことによってプロジェクトで、Eclipseは「テストランナーjunit 4でテストが見つかりません」と不平を言いました。m2eclipseをm2eclipse更新サイトから最新の安定した開発ビルドにアップグレードすることで解決しました(具体的には、Eclipse Galileoでバージョン0.9.8.200905041414からバージョン0.9.9.200907201116にアップグレードしました)。

ここから:http : //nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html


わかりません。eclispeのバージョンに関連しているとは思いません。私のテストは昨日はうまくいきましたが、JUnitの起動ポップアップが最初の構成に戻る方法があるので、今はそうではありません。
user281070 '25

ラミッセ、私も混乱しています。質問を更新して、単体テストの実行がいつ機能し、いつ機能しないかを説明することをお勧めします。
b.roth

0

これも私に起こりました。私はEclipseで新しいJavaクラスファイルを作成しなかったので、コンパイルされなかったことがわかりました。コードがJavaクラスファイルにない場合は、それをコピーしてコンパイルします。


0

あなたのテストクラスがから拡張されてTestCaseいる場合、EclipseはJUnit 3スタイルのテストのみを実行するように見えることがわかりました。継承を削除すると、注釈が機能しました。

assert*ような必要なすべてのメソッドを静的にインポートする必要があることに注意してくださいimport static org.junit.Assert.*


0

コマンドラインでmvn cleanを実行してから、eclipseでproject-> cleanを実行する必要がありました。私は事前にクラスの名前を変更してから元の名前に戻しましたが、それが役に立ったとは思えません。


0

また、Maven(m2e 1.4)でEclipseを実行しています。テストはMavenで実行されていましたが、Eclipseで実行されていませんでした...を何度か適用した後でもですMaven>Update project

私の解決策は、m2eによって生成された.classpathにいくつかの行を追加することでした。線がくっついています。

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>

0

私は時々この問題を抱えています。私にとって最も問題を解決するのは、実行構成からJUnitテストを実行することです... JUnit 4がテストランナーとして設定されていることを確認します。

一般に、パッケージエクスプローラーのコンテキストメニューからJRunテストを実行しようとすると、この問題が発生します。実行しようとしているテストのコードを右クリックし、[Run As ... Junit Test]を選択する代わりに[Run configuration ...]を選択した場合、プロジェクト、テストクラス、およびテストランナーが正しく設定されていることを確認し、[適用]をクリックして実行します。私のためにいつも働きます。


0

私は自分の仕事でSeleniumとEclipseを使い始め、最初の自動テストを行っていて、コード@ Before、@ Test、および@Afterから削除し、「テストランナーjunit4でテストが見つかりません」という問題が発生しました。 。

私の解決策は、@ Before、@ Test、および@Afterのメモを再度追加することで、スクリプトが機能しました。これをコードから削除しないことが重要です。

これは、Googleを使用して何かを検索する簡単なテストです。

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}

0

ScalaIDE(3.0.4-2.11-20140723-2253-Typesafe)を使用して、Right Click Scala Test Class-> Run As -> Scala Junit Testコンテキストメニューで同様の問題を抱えていました。

クラスの編集(コンパイルの失敗ではない)、クリーンアップ、プロジェクトのクローズ、Eclipseのクローズを試みました。以前はうまく機能していたクラスのコンテキストメニューを復元するために機能したものはありませんでした。テストクラスは@Testアノテーションを使用せず、代わりに@RunWith(classOf[JUnitRunner])ScalaTestコードを使用してクラスの先頭にあるアノテーションを使用します。

Scala Junit Test実行構成の起動エディターから直接選択しようとすると、質問からダイアログが表示されました。Footix29の答えは私にとって鍵でした。

プロジェクトを数回クリーンアップしたにもかかわらず、/ binディレクトリ内のクラスが実際にしばらく再構築されていないことに気付きました。

これがコンテキストメニューに戻った方法です。もう一度Scala Junit Testsを実行することができました。

  • manually/bin/<package dir>*エクスプローラ経由でクラスを削除しました
  • Project -> Clean完全な再構築とともにプロジェクトを編集した

私は、クラス編集は一般に、Eclipseの保存された状態をクリーンアップして、それを再び実行できると思います。私の場合、以前に試してみたすべてのクラスが失敗したため、manualクリーンな手順は必要なハンマーだけでした。ただし、Eclipseのクラスパス/ビルド状態の概念に影響を与える他のトリックも機能するはずです。

さらに、この動作の一部は、Scalaクラスの名前を変更して(Scala Eclipse IDEがそれを吸収する)Scalaクラスをリファクタリングしようとしたことによるもので、最初のファイル変更後のすべてのクリーンアップは手動です。ビルドエラーはありませんでしたが、Eclipseのビルド状態情報で何かが間違いなくスタックしていることを意味していると期待していたという警告もありませんでした。

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