web-dev-qa-db-ja.com

JUnitテストでJava.lang.Exceptionを伴う初期化エラーが発生しました:一致するテストが見つかりませんでした

JUnitテストを実行すると、initializationError:一致するテストが見つかりませんでした。このような:

prodapi-main-junit
initializationError(org.junit.runner.manipulation.Filter)
Java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=testCreateSite], {ExactMatcher:fDisplayName=testCreateSite(com.company.product.api.web.rest.HostControllerTest)], {LeadingIdentifierMatcher:fClassName=com.company.product.api.web.rest.HostControllerTest,fLeadingIdentifier=testCreateSite]] from org.junit.internal.requests.ClassRequest@3c0f93f1
    at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.Java:40)
    at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.Java:77)
    at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.Java:68)
    at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.Java:43)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:444)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:675)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:382)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:192)

テストコードは次のとおりです。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ProductApplication.class)
@WebAppConfiguration
public class HostControllerTest{
    @Test
    public void testCreateSite() throws Exception {
    ......
}
}

クラスをロードして問題なく実行できるはずです。このモジュールに似た他のモジュールがありますが、実行しても問題ありません。

考えられる原因を確認しました。

  1. 誰かが「テスト」注釈がないとこのエラーが発生すると言いました。ご覧のとおり、コードには注釈がありました。
  2. 一部の人は、テストパスをテストソースフォルダーの下でビルドし、テストクラスを取得してエクスポートするようにビルドパスを構成する必要があると述べました。そして、私が再確認したその構成も同様に機能しました。
  3. テストクラスはコンパイル時に生成されないかもしれませんが、それらのテストクラスは宛先フォルダーの下に表示されます。

このようなJunitテストエラーが発生する可能性のあるものが他にあるかどうかはわかりません。クラスローダーを確認する必要がありますか?

6
Ron

いくつかの答えをググった後。次のようにこのケースについて話している問題があることがわかりました: https://github.com/junit-team/junit4/issues/1277 (FilterRequestはテストの実際の失敗の原因(例外)を隠します)私が試した手順は次のとおりです:
1。テスト機能のみを選択しないでください。一方、[テスト]タブで[選択したプロジェクトのすべてのテストを実行]オプションを選択し、[実行]-> [実行(デバッグ)構成]をクリックしてJunitプロジェクト名を選択します
2。次のようにしてエラーの詳細を取得できます。

initializationError(com.company.product.api.web.rest.HostControllerTest)
Java.lang.Exception: Method testSetDBConfiguration should have no parameters
    at org.junit.runners.model.FrameworkMethod.validatePublicVoidNoArg(FrameworkMethod.Java:76)
    at org.junit.runners.ParentRunner.validatePublicVoidNoArgMethods(ParentRunner.Java:155)

3.上記のEclipseによって与えられた詳細に従って、私はその関数の引数を削除しました。initializedErrorはちょうど消えました。

そのため、新しく追加されたテスト関数に不要な入力引数があるため、この問題が発生します。間違ったコード:

@Test
public void testSetDBConfiguration(String name) throws Exception {

に変更

@Test
public void testSetDBConfiguration() throws Exception {
6
Ron

私は同様の問題を抱えていましたが、後で、メインのスプリングブートアプリケーションの構成が、テストクラスを含むパッケージをスキャンしていないことに気付きました。

メインクラスはパッケージをスキャンしていました-{"com.mycmp.prj.pkg1"、 "com.mycmp.prj.pkg2"、 "com.mycmp.dependentprj.pkg5"}

テストクラスはパッケージにありました-com.mycmp.prj.pkg3

現在のプロジェクトからすべてのパッケージをスキャンし、依存ライブラリから限られた必要なパッケージのみをスキャンするようにベースパッケージを修正することで問題が修正されました


メインJavaクラス

@SpringBootApplication(scanBasePackages = {"com.mycmp.prj.pkg1"、 "com.mycmp.prj.pkg2"、 "com.mycmp.dependentprj.pkg5"})パブリッククラスMyApplication extends SpringBootServletInitializer {

public static void main(final String[] args) {
    SpringApplication.run(MyApplication.class, args);
}

@Override
protected SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
    return application.sources(MyApplication.class);
}

@Bean
public FilterRegistrationBean<Filter> customFilters() {
  final FilterRegistrationBean<Filter> registration = new 
  FilterRegistrationBean<>();
  final Filter myFilter = new ServicesFilter();
  registration.setFilter(myFilter);
  registration.addUrlPatterns("/myurl1/*", "/myurl2/*");
  return registration;
}

@PostConstruct
public void started() {
  //
}

}

私のテストクラス

**package com.mycmp.prj.pkg3;**

import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.mongodb.MongoClient;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApplication.class)
public class MongoConfigStoreTest {

  @Test
  public void testConnection() throws Exception {

    final MongoClient client = new MongoClient("localhost", 127027);
    assertNotNull(client);
    assertNotNull(client.getDatabase("localhost"));

  }
}
0
Prashant Rajput