2013-04-06 3 views
2

Я относительно новичок в maven и боролся с прилагаемыми тестами, я нашел несколько статей здесь, которые заставили меня участвовать в этом, но не могут получить последнее последнее немного. Вот что я пытаюсь сделать. У меня есть 2 модуля, которые определяют набор интерфейсов и рудиментарный тест этих интерфейсов. Второй модуль обеспечивает реализацию интерфейса, и я бы хотел запустить на нем предопределенный тест. Я варил вниз к простому примеру, вот эти два проекта:Maven исполнение одного прилагаемого теста

interface 
+ pom.xml 
+ src 
    + main 
     + java 
      + demo 
      + Messenger.java 
    + test 
     + java 
      + demo 
      + MessengerTest.java 

impl 
+ pom.xml 
+ src 
    + main 
     + java 
      + demo 
      + impl 
       + MessengerImpl.java 
    + test 
     + resources 
      + context.xml 

Интерфейс pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 4.0.0.xsd"> 
    <groupId>demo</groupId> 
    <artifactId>interface</artifactId> 
    <version>1.0</version> 
    <modelVersion>4.0.0</modelVersion> 
    <packaging>jar</packaging> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.2.2.RELEASE</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.14</version> 
     <configuration> 
      <skipTests>true</skipTests> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Источник Messenger.java:

package demo; 

public interface Messenger { 
    String getMessage(); 
} 

MessengerTest .java источник:

package demo; 

import static org.junit.Assert.assertNotNull; 
import static org.junit.Assert.assertTrue; 

import org.junit.Before; 
import org.junit.Test; 
import org.springframework.beans.factory.BeanFactory; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import demo.Messenger; 

public class MessengerTest { 
    private BeanFactory beanfactory; 

    @Before 
    public void setUp() throws Exception { 
     beanfactory = new ClassPathXmlApplicationContext("context.xml"); 
    } 

    @Test 
    public final void testGetMessage() throws Exception { 
     final Messenger msngr = beanfactory.getBean(Messenger.class); 
     String msg = msngr.getMessage(); 
     assertNotNull(msg); 
     assertTrue(msg.length() > 0); 
    } 
} 

Выполнение 'mvn install', похоже, делает правильные вещи, создавая интерфейс-1.0.jar и interface-1.0-tests.jar в моем локальном репозитории.

код реализации проста, pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <groupId>demo</groupId> 
    <artifactId>impl</artifactId> 
    <version>1.0</version> 
    <modelVersion>4.0.0</modelVersion> 
    <packaging>jar</packaging> 

    <dependencies> 
    <dependency> 
     <groupId>demo</groupId> 
     <artifactId>interface</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>demo</groupId> 
     <artifactId>interface</artifactId> 
     <version>1.0</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

</project> 

Источник MessageImpl.java:

package demo.impl; 

import demo.Messenger; 

public class MessengerImpl implements Messenger { 

    @Override 
    public String getMessage() { 
     return "Hello World"; 
    } 
} 

И, наконец, контекст весна файл:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
    <bean id="MyMessenger" class="demo.impl.MessengerImpl"/> 
</beans> 

Со всем этим на месте я выполняю «mvn -Dtest = demo.MessengerTest test», и, к сожалению, он терпит неудачу с «... No tes были казнены! ». Таким образом, есть проблема.

Извините, что за то, что вы так долго наматывались, но я хотел быть достаточно полным, любое руководство было бы очень благодарно.

+0

У вас есть ' true' set в плагине maven-surefire: Может быть, проблема? – torquestomp

+0

Я считаю, что это влияет только на создание артефактов интерфейса, нет классов реализации, поэтому тест не может быть запущен до установки. – rgmoul

+0

Я подтвердил это, я удалил его с pm и переустановил (указав -Dtest.skip = true в командной строке), и получаю те же результаты. – rgmoul

ответ

1

Surefire не проверяет путь к классу при определении того, какие классы запускаются, поэтому обычно рассматриваются только те тесты, которые определены в одном модуле. Он проверяет в target/classes в проекте impl, не видит никаких тестов и игнорирует MessengerTest. Вы можете определить набор тестов в проекте impl, который ссылается на тесты для запуска или разархивировать зависимость в target/classes.

+0

Я тестировал, используя тестовый набор, который включает тесты из модуля интерфейса, и это действительно работает, это моя задняя позиция. Благодарю. – rgmoul

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