2017-02-02 1 views
1

В настоящее время при запуске maven-сборки все мои тесты запускаются, и отчет о уверенности создается как XML-журнал (TEST-my.project.TestApp).Подключить пользовательскую аннотацию к тестеру JUnit в Maven

Я создал свою собственную аннотацию @Trace (RQ = «require it tests»), чтобы связать мои тесты с определенным требованием, которое он проверяет.

То, что я хочу, что когда тест запускается с Maven во время сборки, внутри XML журнала, который генерируется в SUREFIRE-отчетах вместо:

<testcase time="0.113" classname="my.project.TestApp" name="FirstTest"/> 

я должен получить:

<testcase time="0.113" classname="my.project.TestApp" name="FirstTest"> 
    <traceability>requirement it tests</traceability> 
</testcase> 

Моя проблема заключается в следующем:

Как связать аннотацию и реализацию обработки указанной аннотации с бегущим классом класса JUnit, используемым Maven при его создании? Или как подключить его к плану surefire, который создает отчет?

ответ

0

Хорошо, мне удалось сделать то, что работает очень хорошо для меня:

Сначала я делаю аннотации:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) //can use in method only. 
public @interface Trace { 
    public String[] RQ() default ""; 
} 

Тогда я слушатель:

public class TestLogger extends RunListener { 
private static Map<String[], String[]> requirementsMap = new LinkedHashMap<String[], String[]>(); 

public void testFinished(Description description) { 
    if (description.getAnnotation(Trace.class) != null){ 
     String[] testDescription = { description.getClassName(), description.getMethodName() }; 
     requirementsMap.put(testDescription, description.getAnnotation(Trace.class).RQ()); 
    } 
} 

@Override 
public void testRunFinished(Result result) throws Exception { 

    XMLRequirementsReporter writer = new XMLRequirementsReporter(); 
    writer.writeXMLReport(requirementsMap); 
    super.testRunFinished(result); 
    } 
} 

Тогда Я делаю свой собственный испытательный бегун Junit, в котором я добавляю слушателя:

public class TestRunner extends BlockJUnit4ClassRunner 
{ 
    public TestRunner(Class<?> klass) throws InitializationError 
    { 
     super(klass); 
    } 

    @Override 
    public void run(RunNotifier notifier) 
    { 
     notifier.addListener(new TestLogger()); 
     super.run(notifier); 
    } 
} 

Наконец я добавляю к П XML следующим образом:

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
    </dependency> 
</dependencies> 

<build> 
    <resources> 
     <resource> 
      <directory></directory> 
      <targetPath>${project.build.directory}/surefire-reports</targetPath> 
      <includes> 
       <include>TEST-Traceability.xml</include> 
      </includes> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 
<build> 

Это будет генерировать свой собственный отчет XML в мавенно строить, в котором у меня есть корреляция между требованиями и тестами, и которые я могу в дальнейшем использовать для создания HTML отчет или что-то действительно.

Смежные вопросы