2

私はMavenに比較的慣れておらず、添付されたテストに苦労しています。ここでいくつかの記事を見つけましたが、そこに行く途中でしたが、最後の少しを得ることができません。これが私がやろうとしていることです。インターフェイスのセットとそれらのインターフェイスの基本的なテストを定義する 2 つのモジュールがあります。2 番目のモジュールはインターフェイスの実装を提供し、定義済みのテストを実行したいと考えています。簡単な例にまとめました。ここに 2 つのプロジェクトがあります。

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」を実行すると、ローカル リポジトリに interface-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";
    }
}

最後に、Spring コンテキスト ファイル:

<?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 テスト」を実行すると、残念ながら「...テストが実行されませんでした!」で失敗します。だから問題があります。

申し訳ありませんが、かなり長くなりましたが、かなり完全なものにしたかったので、ガイダンスをいただければ幸いです。

4

1 に答える 1

1

Surefire は、実行するクラスを決定するときにクラスパスをスキャンしないため、通常は同じモジュールで定義されたテストのみが考慮されます。プロジェクトにチェックインtarget/classesし、implテストを表示せず、無視しMessengerTestます。実行するテストを参照するプロジェクトでテスト スイートを定義するimplか、依存関係を .zip に解凍することができますtarget/classes

于 2013-04-06T04:46:52.910 に答える