2017-01-25 5 views
1

У меня есть 3 теста, которые хранятся в пакете, которые используют Jotit @Test для аннотации. У меня нет основного класса в проекте. Естественно, я могу запустить Run As> Maven Test, и все 3 теста будут выполнены.Как создать файл Maven Jar, когда тесты содержат аннотации JUnit @Test и никакого основного класса

Я создал исполняемый файл Jar с помощью команды Install, но когда я пытаюсь запустить Jar-файл, я получаю сообщение - сообщение «Нет основного атрибута манифеста».

Какое решение имеет дело с этим в Maven?

Я знаю, что в Gradle вам не нужен основной класс для запуска исполняемого Jar.

Кроме того, мне нужно создать главный класс, содержащий основной метод следующим образом:

public static void main(String[] args){ 
List tests = new ArrayList(); 
tests.add(TestOne.class); 
tests.add(TestTwo.class); 

for (Class test : tests){ 
    runTests(test); 
} 
} 

private static void runTests(Class test){ 
Result result = JUnitCore.runClasses(test); 
for (Failure failure : result.getFailures()){ 
    System.out.println(failure.toString()); 
} 
} 

Такого рода чувствует нелогичным для меня, однако.

+0

Я не понимаю, как вы хотите запускать JAR без основного класса? – Tunaki

+0

У меня есть 3 отдельных теста, которые содержат аннотации @Test, но, возможно, мне нужен основной класс, если да, то как мне его создать? – Nazrod12

+2

Но как вы намерены запускать его, по крайней мере, концептуально? Что именно вы пытаетесь достичь? – Tunaki

ответ

1

Генерация тест-банка

Вы можете добавить это в ваш pom.xml, чтобы создать банку с вашим всеми тестами:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.6</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Выполнить тестовый класс

Затем выполнить тесты таким образом:

java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \ 
    junit.textui.TestRunner com.xyz.SomeTest 

Вам необходимо добавить все необходимые зависимости в -cp аргументы.

Test Suite

Каждый тест должен быть выполнен один на один, но вы могли бы create a testSuite, так что вы можете легко выполнить все тесты, с помощью одной команды:

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
     SomeTest.class, 
     SomeOtherTest.class 
}) 
public class SuiteAbcTest { 
    //normally, this is an empty class 
} 

и выполнить Test Suite:

java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \ 
    junit.textui.TestRunner com.xyz.SuiteAbcTest 
+0

Отличный Алекс, даст вам возможность вернуться и вернуться к вам! – Nazrod12

+0

, кстати, это предполагает, что ваши тесты находятся в тестовой папке maven: 'src/test/java' (не в' src/main/java') – alexbt

+0

Ahh да, я попытался скомпилировать, используя это, но я получаю некоторую компиляцию ошибка, которая говорит, что мой пакет с именем test не существует. Попробуем и разрешим это. Будет ли мне еще класс TestRunner? – Nazrod12