Эта проблема не только в запуске jar-файла, содержащего тесты, но и в запуске теста category внутри jar-файла.
У нас есть категория теста, которая выглядит примерно так:
package com.company.test.suites;
import org.junit.experimental.categories.Categories;
import org.junit.experimental.categories.Categories.IncludeCategory;
import org.junit.runner.RunWith;
import org.junit.runners.Suite.SuiteClasses;
import com.company.test.BasicSeleniumTests;
@RunWith(Categories.class)
@IncludeCategory(BasicSeleniumTests.class)
@SuiteClasses({ AllProjectTests.class })
public class RunBasicConfigurationSuite {
}
Мы можем запустить его из Gradle, мы уже делаем это примерно так:
task functionalTests(type: Test, dependsOn: [ "testClasses" ]) {
include 'com/company/test/suites/RunBasicConfigurationSuite.*'
// Set JVM arguments for the test JVM(s).
jvmArgs "-Xmx3600m", "-Xms1024m"
}
Сейчас я пытаюсь создать автономную банку для инструментамы бежали из командной строки.Я создаю банку так:
task testRunner(type: Jar) {
manifest {
attributes "Main-Class": "com.company.selenium.runners.TestRunner"
}
baseName = "TestRunner"
from {
configurations.testCompile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
from sourceSets.test.output
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
with jar
}
Созданная баночка выглядит хорошо, я могу пойти:
java -jar ../test-module/build/libs/TestRunner-4.1.0.0-SNAPSHOT.jar
и баночка запускается, и запускается основной класс, который выглядит так:
пакет com.company.selenium.runners;
import org.junit.runner.JUnitCore;
public class TestRunner {
public static void main(String[] args) {
JUnitCore.main(
"com.company.test.suites.RunBasicConfigurationSuite");
}
}
Однако, поскольку мы хотим запустить тестовую категориюэто не работаетСообщение об ошибке:
1) initializationError0(com.company.test.suites.RunBasicConfigurationSuite)
java.lang.Exception: Custom runner class Categories should have a public constructor with signature Categories(Class testClass)
Categories - это класс из JUnit, и да, у него нет этого конструктора.Не уверен, что мне теперь делать?Подкласс Категории и использовать это, вместо этого?
Редактировать: Это не сработало.Простое создание подклассов и реализация пустого конструктора приводит к этому:
java.lang.NoSuchMethodError: org.junit.runners.Suite.<init>(Ljava/lang/Class;Lorg/junit/runners/model/RunnerBuilder;)V
?