对于单元任务noclassdeffoundererror



又是一个经典的蚁群问题。就像我在这个主题上发现的其他问题一样,这可能是一些微妙的类路径错误,但建议的解决方案都不适合我。下面是我的测试代码,在Eclipse中运行得很好——

package trial;
import java.net.MalformedURLException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import trial.CommonCode;  //this is a library of methods, since the test runs I'm not including it here
public class BaseTests {
    WebDriver driver;
    CommonCode myCommon;
    @Before 
    public void startup() throws MalformedURLException, InterruptedException{
        myCommon=new CommonCode();
        driver=myCommon.driver;
    }
    @After
    public void cleanup(){
        driver.quit();
    }   
    @Test
    public void deleteLists(){
        System.out.println("Hi Mom!");
        myCommon.loginLibrary("GAL");
    }
}

这是我的build.xml(类文件在${workdir}bintrial和源文件在${workdir}srctrial)——

<project default="main" basedir=".">
    <property name="testbin" value="bintrial"/>
    <property name="src.dir" value="srctrial"/>
    <path id="path.class">
      <pathelement location="c:Javaselenium-2.8.0" /> 
      <pathelement location="C:eclipsepluginsorg.junit_4.8.2.v4_8_2_v20110321-1705"/>
        <pathelement location="C:eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300"/>
      <fileset dir="c:Javaselenium-2.8.0" includes="*.jar" /> 
      <fileset dir="C:eclipsepluginsorg.junit_4.8.2.v4_8_2_v20110321-1705" includes="*.jar"/>
        <fileset dir="C:eclipsepluginsorg.apache.ant_1.8.2.v20110505-1300lib" includes="*.jar"/>
      <path refid="src.dir" /> 
      </path>
    <path id="src.dir">
      <pathelement location="${src.dir}" /> 
      </path>
    <path id="test.dir">
        <pathelement location="${testbin}"/>
    </path>    
    <target name="main" depends="compile" description="main target">
        <echo> Building now </echo>
    </target>
    <target name="compile" description="compilation target" >
        <javac srcdir="${src.dir}" destdir="${testbin}" classpathref="path.class" debug="on" verbose="true"/>
    </target>
    <target name="runtest" >
            <junit fork="no" printsummary="true" showoutput="true">
                <classpath>
                    <path refid="path.class"/>
                    <path refid="test.dir"/>
                    <path refid="src.dir"/>
                </classpath>
                <formatter type="brief" usefile="false" />
                <batchtest fork="yes">
                    <fileset dir="${testbin}">                  
                        <include name="*Tests.class"/>
                    </fileset>
                </batchtest>
            </junit>
        </target>
</project>

无论我是从命令行还是从eclipse ant窗格运行ant任务runtest,都会得到相同的错误:

runtest:
    [junit] Running BaseTests
    [junit] Testsuite: BaseTests
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit] Null Test:  Caused an ERROR
    [junit] BaseTests (wrong name: trial/BaseTests)
    [junit] java.lang.NoClassDefFoundError: BaseTests (wrong name: trial/BaseTests)
    [junit]     at java.lang.ClassLoader.defineClass1(Native Method)
    [junit]     at java.lang.ClassLoader.defineClassCond(Unknown Source)
    [junit]     at java.lang.ClassLoader.defineClass(Unknown Source)
    [junit]     at java.security.SecureClassLoader.defineClass(Unknown Source)
    [junit]     at java.net.URLClassLoader.defineClass(Unknown Source)
    [junit]     at java.net.URLClassLoader.access$000(Unknown Source)
    [junit]     at java.net.URLClassLoader$1.run(Unknown Source)
    [junit]     at java.security.AccessController.doPrivileged(Native Method)
    [junit]     at java.net.URLClassLoader.findClass(Unknown Source)
    [junit]     at java.lang.ClassLoader.loadClass(Unknown Source)
    [junit]     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    [junit]     at java.lang.ClassLoader.loadClass(Unknown Source)
    [junit]     at java.lang.Class.forName0(Native Method)
    [junit]     at java.lang.Class.forName(Unknown Source)
    [junit] Test BaseTests FAILED

所以它是找到正确的junit测试(trial.BaseTests),但随后声称它有错误的名称。任何建议,特别是调试提示,我可以避免这个问题在未来。

首先,src目录应该是src, testbin应该是bin。这些是包树的根。

接下来,类路径应该包含jar文件和包含编译类的目录,而不是源文件。所以junit的类路径应该包含testdir,而不是src dir。

最后,即使在Windows上,也应该使用正斜杠而不是反斜杠,并且在定义包含文件或目录路径的属性时,还应该使用location属性而不是value属性。

看起来您的文件路径不正确。它们应该匹配包名。

你的测试类是trial.BaseTests。您告诉JUnit执行bin/trial下的所有测试。因此,它搜索bin/trial下的所有文件,并找到BaseTests.class,它应该在trial/BaseTests.class下。

将testbin从'bin/trial'更改为'bin':

<property name="testbin" value="bin"/>

相关内容

  • 没有找到相关文章