2017-02-16 45 views
0

Мои Java JUnit тест на структуру: src/com/project/test/test_junit.javaAnt скрипт для запуска теста JUnit показывает java.lang.ClassNotFoundException

Мой муравей скрипт:

<project name="Test" basedir="." default="unit-test"> 


    <property name="src" value="src"/> 
    <property name="build-test-classes" value="${src}/com/project/test"/> 
    <property name="lib" value="lib"/> 
    <property name="junit4" value="lib/junit-4.12.jar"/> 

    <target name="unit-test"> 

     <junit printsummary="yes" haltonfailure="yes"> 
      <formatter type="plain" usefile="false"/> 
      <classpath> 
       <pathelement location="${junit4}"/> 
       <pathelement location="${build-test-classes}"/> 
      </classpath> 
      <batchtest> 
       <fileset dir="${build-test-classes}"> 
        <include name="**/*.java"/> 
       </fileset> 
      </batchtest> 
     </junit> 
    </target> 
</project> 

PS .: Я изменил некоторые имена, чтобы сделать менее конкретный код.

Во время работы Ant скрипта, я сталкиваюсь следующий вопрос:

unit-test: 
    [junit] Running test_junit 
    [junit] Testsuite: test_junit 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec 
    [junit] 
    [junit]  Caused an ERROR 
    [junit] test_junit 
    [junit] java.lang.ClassNotFoundException: test_junit 
    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    [junit]  at java.lang.Class.forName0(Native Method) 
    [junit]  at java.lang.Class.forName(Class.java:348) 
    [junit] 

BUILD FAILED 
/build_junit_test.xml:23: Test AccountGS_Junit failed 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.actOnTestResult(JUnitTask.java:1959) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:858) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1904) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:804) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.Target.execute(Target.java:435) 
    at org.apache.tools.ant.Target.performTasks(Target.java:456) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364) 
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248) 
    at org.apache.tools.ant.Main.runBuild(Main.java:851) 
    at org.apache.tools.ant.Main.startAnt(Main.java:235) 
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 

Total time: 0 seconds 

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

ответ

2

Готов поспорить, что вы не скомпилировали тестовый код. Намек свойство сборки-тест-классов, который указывает на файлы в исходном коде дерева:

<property name="src" value="src"/> 
<property name="build-test-classes" value="${src}/com/project/test"/> 

Пример

Создать цель, которая компилирует исходный код

<target name="compile" depends="resolve,resources" description="Compile code"> 
    <mkdir dir="${build.dir}/classes"/> 
    <javac srcdir="${src.dir}" destdir="${build.dir}/classes" includeantruntime="false" debug="true" classpathref="compile.path"/> 
</target> 

Создать цель который скомпилирует ваш контрольный код

<target name="compile-tests" depends="compile" description="Compile tests"> 
    <mkdir dir="${build.dir}/test-classes"/> 
    <javac srcdir="${test.src.dir}" destdir="${build.dir}/test-classes" includeantruntime="false" debug="true"> 
     <classpath> 
      <path refid="test.path"/> 
      <pathelement path="${build.dir}/classes"/> 
     </classpath> 
    </javac> 
</target> 

Затем Junit должен работать

<target name="test" depends="compile-tests" description="Run unit tests"> 
    <mkdir dir="${build.dir}/test-reports"/> 
    <junit printsummary="yes" haltonfailure="yes"> 
     <classpath> 
      <path refid="test.path"/> 
      <pathelement path="${build.dir}/classes"/> 
      <pathelement path="${build.dir}/test-classes"/> 
     </classpath> 
     <formatter type="xml"/> 
     <batchtest fork="yes" todir="${build.dir}/test-reports"> 
      <fileset dir="${test.src.dir}"> 
       <include name="**/*Test*.java"/> 
       <exclude name="**/AllTests.java"/> 
      </fileset> 
     </batchtest> 
    </junit> 
</target> 
+0

Hi Mark. Я также проверил компиляцию кода и не работал. Затем я последовал этому руководству: http://tutorials.jenkov.com/java-unit-testing/running-tests-with-ant.html, который использует java без компиляции. Но хотя я дам еще один снимок с вашим объяснением –