1. ホーム
  2. java

[解決済み] Java Junit4 サポート拡張ベースクラス

2022-02-11 14:18:41

質問事項

質問です。

というようなことをしたとき。

package path.to.common.package.test;
@BeforeClass
public class CommonTestSetup {

  public void setUp() {
   // Setup Stiff
  }
}

そして、同じパッケージ内の他のクラスの設定。

package path.to.common.package.test;
public class TestTest extends CommonTestSetup {
    @Test
    public void testGetTestReturnsCorrectStrings() {
    // do asserts etc
    }
}

そして、JUnit テストを testGetTestReturnsCorrectStrings エラーが発生するのですが。

org.junit.runners.model.InvalidTestClassError: Invalid test class 'org.junit.runner.manipulation.Filter':
  1. No runnable methods
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:456)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:99)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:84)
    at org.junit.runners.JUnit4.<init>(JUnit4.java:23)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:66)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:66)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:39)
    at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:80)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:71)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:523)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:207)

なぜでしょうか?JUnit 4 は、ベースクラスを拡張するテストクラスをサポートしていないということでしょうか?

この背後にあるアイデアは、単一のSetUpベースクラスを作成し、それを必要とする他の多くのテストクラスで共有することでした。 元々、ベースクラスを全く別のパッケージに置こうとしていたのですが、テスト用に同じパッケージに移動したところ、別のエラー(上記のもの)が発生しました。

解決方法は?

をベースに JUnitのドキュメント :

public static void no-arg メソッドに @BeforeClass を付けると、クラス内のどのテストメソッドよりも前に一度だけ実行されるようになります。

そこで @BeforeClass アノテーションを setUp メソッドに追加し、スタティックメソッドにします。