5

我正在使用 Maven 和 Junit 测试。我正在使用标准的 Maven 项目结构,我可以在 Eclipse 中运行“作为 Junit 测试运行”,它们都成功了,但是如果我想运行 Maven 测试/安装,那么测试没有运行,导致错误“无法初始化类 main.sushi.persistence.Persistor”。

这是我们的项目树:

├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── main
│   │   │       └── sushi
│   │   │           └── persistence
│   │   │               ├── DatabaseEnvironments.java
│   │   │               ├── META-INF
│   │   │               │   ├── persistence.xml
│   │   │               │   └── persistence_template.xml
│   │   │               └── Persistor.java
│   │   └── resources
│   └── test
│       ├── java
│       │   ├── META-INF
│       │   │   ├── persistence.xml
│       │   │   └── persistence_template.xml
│       │   └── test
│       │       └── sushi
│       │           └── persistence
│       │               ├── ProcessPersistorTest.java
│       │               └── TestPersistor.java
│       └── resources
└── target
    ├── classes
    │   ├── META-INF
    │   │   ├── MANIFEST.MF
    │   │   └── maven
    │   │       └── sushi
    │   │           └── SushiPersistence
    │   │               ├── pom.properties
    │   │               └── pom.xml
    │   └── main
    │       └── sushi
    │           └── persistence
    │               ├── DatabaseEnvironments.class
    │               ├── META-INF
    │               │   ├── persistence.xml
    │               │   └── persistence_template.xml
    │               └── Persistor.class
    ├── generated-sources
    │   └── annotations
    ├── surefire
    ├── surefire-reports
    │   ├── TEST-test.sushi.persistence.ProcessPersistorTest.xml
    │   ├── TEST-test.sushi.persistence.TestPersistor.xml
    │   ├── test.sushi.persistence.ProcessPersistorTest.txt
    │   └── test.sushi.persistence.TestPersistor.txt
    └── test-classes
        ├── META-INF
        │   ├── persistence.xml
        │   └── persistence_template.xml
        └── test
            └── sushi
                └── persistence
                    ├── ProcessPersistorTest.class
                    └── TestPersistor.class

起居室:

<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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>sushi</groupId>
    <artifactId>SushiPersistence</artifactId>
    <version>SNAPSHOT</version>
    <repositories>
        <repository>
            <id>EclipseLink</id>
            <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
        </repository>
    </repositories>
    <build>

        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>de.hpi-web.sushicommon</groupId>
            <artifactId>SushiCommon</artifactId>
            <version>SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.3.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa</artifactId>
            <version>2.0.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.22</version>
        </dependency>
    </dependencies>


</project>
4

3 回答 3

2

老问题,但我会提供我的答案,因为前几天我遇到了一个非常相似的问题。我正在为包 project.model 中的类 Foo 编写一个单元测试,它在包 project.cache 中有一个 Bar 类型的成员。当 maven 运行单元测试时,我在创建 Bar 类型的模拟时遇到了上述错误。

运行 mvn verify -X 时,我注意到运行测试时类路径中缺少目标/类。

我通过在 pom.xml 中添加以下内容来解决它。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.22.0</version>
      <configuration>
        <additionalClasspathElements>
          <additionalClasspathElement>${project.basedir}/target/classes</additionalClasspathElement>
        </additionalClasspathElements>
      </configuration>
    </plugin>

  </plugins>
</build>

于 2018-08-22T15:34:40.980 回答
1

src/main/sushi/persistence/META-INF中的资源必须位于src/main/resources下,并且测试的相应文件夹必须位于src/test/resources下,而不是src/main/javasrc/test/爪哇_

于 2012-12-20T10:59:06.637 回答
0

从您的所有依赖项中删除范围标签..当前您已将其设置为编译,因此 maven 执行您要求的操作..意味着它在测试阶段不包括您的依赖项。

于 2012-12-20T19:48:03.310 回答