簡體   English   中英

執行Maven單元測試,並將classpath設置為生成的項目JAR

[英]Executing Maven unit tests with classpath set to generated project JAR

我的應用程序中的某些單元測試與查找和操作屬於應用程序本身的某些文件資源有關。 我需要在應用程序的實際生產設置中執行這些測試,它將其部署為JAR文件,而不是展開的目錄。

我怎么能指示Maven執行我的單元測試,考慮到項目生成jar文件(和任何其他聲明的庫依賴項)的類路徑而不是默認情況下文件系統中的編譯類?

換句話說,現在我的單元測試的類路徑設置為: /$PROJECTPATH/target/classes/

相反,我希望將此類路徑設置為:/ /$PROJECTPATH/target/myjarfile.jar

我已嘗試手動添加和刪除依賴項類,如下所述: http//maven.apache.org/plugins/maven-surefire-plugin/examples/configuring-classpath.html ,但直到現在它還無法運行。

我目前的項目POM如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.mygroupid</groupId>
  <artifactId>myartifact</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
      ...
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.1</version>
        <configuration>
        <source>1.7</source>
        <target>1.7</target>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.1.2</version> 
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.4</version>

        <configuration>
              <includeScope>runtime</includeScope>
              <outputDirectory>${project.build.directory}/lib</outputDirectory>
        </configuration>

        <executions>
          <execution> 
            <id>copy-dependencies</id>
            <phase>process-resources</phase>
            <!-- <phase>package</phase>  -->
            <goals>
              <goal>copy-dependencies</goal>
            </goals>

          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.3</version>
        <configuration>
              <classpathDependencyExcludes>
                <classpathDependencyExclude>
                  ${project.build.outputDirectory}
                </classpathDependencyExclude>
              </classpathDependencyExcludes>

              <additionalClasspathElements>
                <additionalClasspathElement>
              ${project.build.directory}/${project.build.finalName}.${project.packaging}
                </additionalClasspathElement>
              </additionalClasspathElements>
        </configuration>
      </plugin>

    </plugins>

  </build>
</project>

在此先感謝您的幫助!

作為測試生命周期階段的一部分執行的標准單元測試無法看到項目JAR,因為test階段在package階段之前執行,因此測試在Maven生成JAR之前運行。 有關生命周期階段及其順序的列表,請參閱此頁面

你希望它作為集成測試運行你的測試,它在integration-test階段執行。

有許多教程可以設置Maven來運行集成測試。 這里這里有幾個先發球員。 故障安全插件通常用於執行集成測試。

我不記得集成測試是否在類路徑中使用target/classes或項目的JAR文件。 但如果不是,您可以隨時創建另一個Maven項目,在那里添加測試並將主項目添加為此集成測試項目的依賴項。 在某些情況下,這可能比在主項目中使用集成測試階段更可取,如果它不僅僅是標准的Java庫,例如,如果您正在編寫注釋處理器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM