Не удается запустить простой тест JUnit4 из командной строки - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть сборка ant, которая компилирует файл тестового файла JUnit в src...test и копирует его в build/timex...com/visualpatterns/timex/test (я написал полное имя пути ниже).Но ради жизни я не могу заставить JUnit управлять этим.Кто-нибудь может указать мне правильное направление (я потратил впустую часы на это)?Мой CLASSPATH вроде бы в порядке (JUnit работает), но он не может найти файл класса ...

$ echo $CLASSPATH
**.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;C:\Program Files\junit4.8.2\junit-4.8.2.jar;C:\Program Files\junit4.8.2**


Me@My-PC /cygdrive/c/java/Code/Command_Line/Projects/timex
$ **java org.junit.runner.JUnitCore**
JUnit version 4.8.2

Time: 0.001

OK (0 tests)


Me@My-PC /cygdrive/c/java/Code/Command_Line/Projects/timex
$ **java -cp build/timex/WEB-INF/classes org.junit.runner.JUnitCore  com.visualpatterns.timex.test.SimpleTest**
java.lang.NoClassDefFoundError: org/junit/runner/JUnitCore
Caused by: java.lang.ClassNotFoundException: org.junit.runner.JUnitCore
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.junit.runner.JUnitCore.  Program will exit.
Exception in thread "main"

/cygdrive/c/java/Code/Command_Line/Projects/timex/
------------------------------------------------------

   **build/timex/WEB-INF/classes/com/visualpatterns/timex/test/***SimpleTest.class*

SimpleTest.java

package com.visualpatterns.timex.test;

import org.junit.Test;
import static org.junit.Assert.assertTrue;

public class SimpleTest
{

 int value1 = 2, value2 = 3, expectedResult = 5;

    @Test
    public void addSuccess()
    {
        assertTrue(value1 + value2 == expectedResult);
    }

    @Test
    public void addFail()
    {
        assertTrue(value1 - value2 == expectedResult);
    }
}

Ответы [ 4 ]

3 голосов
/ 18 ноября 2010

Во время второго выполнения вы меняете путь к классу с помощью -cp.Это нормально, если вы хотите добавить новые записи в classpath, но в вашем случае вы заменяете старый classpath, который получил библиотеку junit.Вот почему он больше не может найти класс junit (java.lang.NoClassDefFoundError: org/junit/runner/JUnitCore).Вы должны использовать что-то вроде этого:

$ echo $CLASSPATH
.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;C:\Program Files\junit4.8.2\junit-4.8.2.jar;C:\Program Files\junit4.8.2
(to verify the classpath for junit)
$ java -cp $CLASSPATH;build/timex/WEB-INF/classes org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest
(separate new classpath entries with ; )

См. Также PATH и CLASSPATH и Настройка пути к классам (первые попадания Google).

0 голосов
/ 27 ноября 2010

Спасибо всем !!(и специальный крик Progman).Проблема заключалась в размещении одинарных кавычек вокруг аргумента класса (я использую Cygwin).

Me @ My-PC / cygdrive / c / java / Code / Command_Line / Projects / timex $ java -cp '$ CLASSPATH; C: \ Program Files \ junit4.8.2 \ junit-4.8.2.jar; C: \ Program Files \ junit4.8.2; build / timex / WEB-INF / classes 'org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest

Что касается Eclipse / Antэто слишком просто ;-).Я думаю, что вы узнаете больше, когда начнете с командной строки, а не автоматизируете все это, вроде чтения карты или использования GPS.Как только я запустил эту маленькую веб-арку / приложение, я переключусь на Eclipse, чтобы сэкономить время, но, как известно, я предпочитаю учиться немного больше (и делать глупые ошибки).

Me @ My-PC /cygdrive / c / java / Code / Command_Line / Projects / timex $ java -cp '$ CLASSPATH; C: \ Program Files \ junit4.8.2 \ junit-4.8.2.jar; C: \ Program Files \ junit4.8.2; сборка/ timex / WEB-INF / classes 'org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest

0 голосов
/ 18 ноября 2010

Вы также можете просто использовать Eclipse для запуска тестов Junit. Это быстрее, чем с помощью Ant. Последний, однако, является более портативным. В Eclipse просто введите сочетание клавиш Alt + Shift + X + T, чтобы запустить свой модульный тест.

0 голосов
/ 18 ноября 2010

Вы не запускаете JUnit из командной строки таким образом. В тестах нет метода main, поэтому они не выполняются.

Если вы использовали Ant для компиляции исходного кода, то вам следует использовать Ant и для запуска тестов.

См. Раздел JUnit руководства Ant .

...