簡體   English   中英

Ant Junit任務拋出java.lang.ClassNotFoundException

[英]Ant Junit task throws java.lang.ClassNotFoundException

我有一個簡單的Junit測試,不斷拋出java.lang.ClassNotFoundException。 下面是文件夾結構

project:
|__build.xml
|__hamcrest-core-1.3.jar
|__junit.jar
|__src:
|  |__Simple.java
|__bin:
   |__Simple.class

Simple.java
import org.junit.Test;

public class Simple {
    @Test
    public void check() {
        assert (true);
    }
}

build.xml

<?xml version="1.0"?>
<project name="Ant-Test" default="main">
    <target name="main">
        <junit printsummary="yes" fork="yes" haltonfailure="no">
            <classpath path="hamcrest-core-1.3.jar" />
            <classpath path="junit.jar" />
            <formatter type="plain" />
            <batchtest fork="yes" todir="docs">
                <fileset dir="bin">
                    <include name="**.class" />
                </fileset>
            </batchtest>
        </junit>
    </target>
</project>

Error:
Testsuite: Simple
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
Caused an ERROR
Simple
java.lang.ClassNotFoundException: Simple
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:292)

請幫助我找到發生此錯誤的原因。 該腳本能夠找到測試用例,但最終會引發錯誤。

請嘗試使用以下文件集標記:

<fileset dir="bin">                  
    <include name="**.java" />
</fileset>

將所需的資源添加到測試類路徑中

<pathelement path="${classpath}"/>

您的情況將是:

<classpath>
   <pathelement path="bin" />
   <pathelement location="hamcrest-core-1.3.jar" />
   <pathelement location="junit.jar" />
</classpath>

這里解釋

為了使事情更加靈活,我們添加了一項額外功能,可以匹配多個目錄級別。 這可用於匹配完整的目錄樹或目錄樹中任何位置的文件。 為此, 必須使用”作為目錄名稱。 當**用作模式中目錄的名稱時,它與零個或多個目錄匹配。 例如:/ test /匹配/ test /下的所有文件/目錄,例如/test/x.java或/test/foo/bar/xyz.html,但不匹配/xyz.xml。

必須使用“ **”來匹配文件夾,而不是使用通配符來選擇部分文件名。 使用以下方法更改您的螞蟻:

<fileset dir="bin">
    <include name="*.class" />
</fileset>

如果要選擇bin /下每個目錄下的所有“ * .class”文件,請使用:

<fileset dir="bin">
    <include name="**/*.class" />
</fileset>

現在,測試報告編寫者將導致錯誤原因。 您需要創建一個docs文件夾,然后一切正常。

最終的build.xml將是:

<?xml version="1.0"?>
<project name="Ant-Test" default="main">
    <target name="main">
        <mkdir dir="docs"/>
        <junit printsummary="yes" fork="yes" haltonfailure="no">
            <classpath location="hamcrest-core-1.3.jar" />
            <classpath location="junit-4.12.jar" />
            <classpath path="bin/" />
            <formatter type="plain" />
            <batchtest fork="yes" todir="docs">
                <fileset dir="bin">
                    <include name="**/*.class" />
                </fileset>
            </batchtest>
        </junit>
    </target>
</project>

我不確定junit任務是否允許多個classpath節點,但是無論如何,最好只包含一個classpath節點。 此外,您的類路徑缺少classes目錄。 正確的聲明將是這樣的:

<junit ...>
    <classpath>
        <pathelement path="bin"/>
        <pathelement location="hamcrest-core-1.3.jar"/>
        <pathelement location="junit.jar"/>
    </classpath>
    ...
</junit>

暫無
暫無

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

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