NoClassDefFoundError для задачи ant junit - PullRequest
0 голосов
/ 07 ноября 2011

Еще одна классическая проблема муравьиного юнита.Как и другие вопросы, которые я нашел по теме, это, вероятно, небольшая ошибка пути к классам, но ни одно из предложенных решений не помогло мне.Вот мой тестовый код, который прекрасно работает в 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} \ bin \ trial, а исходные файлы находятся в $ {workdir} \ src \ trial) -

<project default="main" basedir=".">

    <property name="testbin" value="bin\trial"/>
    <property name="src.dir" value="src\trial"/>

    <path id="path.class">
      <pathelement location="c:\Java\selenium-2.8.0" /> 
      <pathelement location="C:\eclipse\plugins\org.junit_4.8.2.v4_8_2_v20110321-1705"/>
        <pathelement location="C:\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300"/>
      <fileset dir="c:\Java\selenium-2.8.0" includes="*.jar" /> 
      <fileset dir="C:\eclipse\plugins\org.junit_4.8.2.v4_8_2_v20110321-1705" includes="*.jar"/>
        <fileset dir="C:\eclipse\plugins\org.apache.ant_1.8.2.v20110505-1300\lib" 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>

Я получаю ту же ошибку, независимо от того, запускаю ли я запуск задачи ant из командной строки или из панели ant eclipse:

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), но затем утверждает, что у него неправильное имя.Будем благодарны за любые предложения, особенно советы по отладке, чтобы я мог избежать этой проблемы в будущем.

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Прежде всего, ваш src dir должен быть src, а ваш тестовый бин должен быть bin.Это корни вашего дерева пакетов.

Далее, classpath должен содержать файлы jar и каталоги, содержащие скомпилированные классы, а не исходные файлы.Таким образом, classpath в junit должен содержать testdir, а не src dir.

Наконец, вы должны использовать прямую и не обратную косую черту, даже в Windows, и вы должны также использовать атрибут location вместо атрибута valueпри определении свойств, содержащих пути к файлам или каталогам.

0 голосов
/ 07 ноября 2011

Похоже, ваши пути к файлам неверны.Они должны соответствовать именам пакетов.

Ваш тестовый класс - trial.BaseTests.Вы говорите JUnit выполнить все тесты в bin / trial.Таким образом, он ищет все файлы в каталоге bin / trial и находит BaseTests.class, который должен находиться в файле trial / BaseTests.class.

Измените тестовый пакет с 'bin / trial' на 'bin':

<property name="testbin" value="bin"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...