JUnit Jupiter эквивалент JUnit4 Test Case Suites - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь выяснить, как создать эквивалент набора тестов JUnit4 в JUnit Jupiter, используя Eclipse.

Например, допустим, у меня есть следующий набор тестов в JUnit 4:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
    CoreContentFactoryTest.class,
    DatatypesFactoryTest.class,
    SpecifiedValuesFactoryTest.class,
    EmbeddedValueFactoryTest.class,
    DefinitionFactoryTest.class
    })

public class TestCaseSuite {

}

Если все тесты перенесены в JUnit Jupiter, как мне создать эквивалентный набор в JUnit Jupiter?

Я пробовал следующее, где datatypes - это пакет, содержащий вышеупомянутые классы:

import org.junit.platform.runner.  JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.SuiteDisplayName;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SuiteDisplayName("Datatype Test Cases")
@SelectPackages({
    "datatypes"
})

public class TestCaseSuite {

}

Однако, когда я пытаюсь выполнить это так же, как я запускаю комплект тестов JUnit4 (говоря «Запускать как тест JUnit»), я получаю следующее сообщение об ошибке:

java.lang.NoSuchMethodError: org.junit.runner.Description.createSuiteDescription(Ljava/lang/String;Ljava/io/Serializable;[Ljava/lang/annotation/Annotation;)Lorg/junit/runner/Description;
    at org.junit.platform.runner.JUnitPlatformTestTree.createJUnit4Description(JUnitPlatformTestTree.java:108)
    at org.junit.platform.runner.JUnitPlatformTestTree.buildDescription(JUnitPlatformTestTree.java:95)
    at org.junit.platform.runner.JUnitPlatformTestTree.lambda$buildDescriptionTree$0(JUnitPlatformTestTree.java:86)
    at java.lang.Iterable.forEach(Unknown Source)
    at java.util.Collections$SynchronizedCollection.forEach(Unknown Source)
    at java.util.Collections$UnmodifiableCollection.forEach(Unknown Source)
    at org.junit.platform.runner.JUnitPlatformTestTree.buildDescriptionTree(JUnitPlatformTestTree.java:86)
    at org.junit.platform.runner.JUnitPlatformTestTree.generateSuiteDescription(JUnitPlatformTestTree.java:72)
    at org.junit.platform.runner.JUnitPlatformTestTree.<init>(JUnitPlatformTestTree.java:50)
    at org.junit.platform.runner.JUnitPlatform.generateTestTree(JUnitPlatform.java:144)
    at org.junit.platform.runner.JUnitPlatform.<init>(JUnitPlatform.java:129)
    at org.junit.platform.runner.JUnitPlatform.<init>(JUnitPlatform.java:122)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:90)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:76)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:526)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

Что я здесь не так делаю? с помощью JUnit 4 это прекрасно работает.


РЕДАКТИРОВАТЬ:

Я углубился в это и хотел добавить этот интересный кусок: я могу на самом деле import org.junit.runner.Description, который работает нормально, а затем просто вызывает метод createSuiteDescription, так как же эта ошибка может быть? Видимо, метод почему-то вызывается с параметрами неправильного типа. Сигнатура функции:

public static Description createSuiteDescription(String name, Annotation... annotations)

Но в соответствии с сообщением об ошибке она вызывается со следующими параметрами:

createSuiteDescription(Ljava/lang/String;Ljava/io/Serializable;[Ljava/lang/annotation/Annotation;)

Это явно вызывается во внешнем классе JUnitPlatformTestTree.java:108. Это могут быть несовместимые версии? И если да, то какие версии совместимы.

Однако, проверяя ошибочную строку в JUnitPlatformTestTree. java, похоже, что функция вызывается с правильными параметрами:

return Description.createSuiteDescription(name, identifier.getUniqueId());

Я использую следующие импорта Gradle:

    testCompile('org.junit.jupiter:junit-jupiter:5.6.0')
    testCompile('org.junit.platform:junit-platform-runner:1.6.0')
    testCompile('org.junit.platform:junit-platform-suite-api:1.6.0')
    testCompile('org.junit.platform:junit-platform-launcher:1.6.0')
    testCompile('org.junit.platform:junit-platform-engine:1.6.0')
    testCompile('org.junit.platform:junit-platform-commons:1.6.0')
    testImplementation 'junit:junit:4.12'

EDIT 2:

Хорошо, я отследил это дальше и обнаружил, что в Gradle, у нас есть следующая зависимость, которая при импорте, кажется, разрушает все:

compile 'com.googlecode.json-simple:json-simple:1.1.1'

Если я закомментирую эту зависимость, ошибка в наборе тестовых примеров исчезнет. Однако, поскольку проекту требуются JSONObject и JSONArray из json .simple, большие части проекта перестают работать.

Это похоже на ошибку несовместимости. Что вызывает это, и как я могу обойти это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...