Проблемы с запуском простого теста JUnit через Ant в eclipse

У меня есть следующий тест JUnit в eclipse:

package test;
import org.junit.Test;
public class SimpleJUnitTest
{
    @Test
    public void doTest() { System.out.println("Test did run"); }
}

И следующий build.xml в той же папке:

<?xml version="1.0" encoding="UTF-8"?>
<project name="LoggerTest" default="JUnitTest" basedir=".">
    <target name="JUnitTest">
            <junit>
                <classpath location="../../lib/junit.jar" />
                <test name="test.SimpleJUnitTest" />
            </junit>
        <echo>boo</echo>
    </target>
</project>

Если я запускаю тестовый класс в разделе «Запуск от имени ...» и выбираю JUnit, он запускается без ошибок. Если я запускаю build.xml в разделе «Запуск от имени ...» и выбираю Ant Build, я получаю следующий результат:

Buildfile: C:\Users\995868\workspace\JUnit1\tst\test\build.xml
JUnitTest:
    [junit] Test test.SimpleJUnitTest FAILED
     [echo] boo BUILD SUCCESSFUL Total time: 390 milliseconds

Если я удалю атрибут classpath в JUnit, я получаю другое сообщение об ошибке о необходимости jar-файла в пути к классам, поэтому я думаю, что JUnit запускается. Я просто не понимаю, в чем его ошибка. Я пробовал поместить код статического блока в класс, чтобы сделать System.out.println(), когда класс загружен, а он не появляется, так что, похоже, я что-то делаю неправильно в конфигурации.

Может кто-нибудь подскажет, что здесь не так?

РЕДАКТИРОВАТЬ:

directory structure:
JUnit1
--bin
  --test
    --SimpleJUnitTest
--lib
  --junit.jar
--scripts
  --build.xml
--src
--tst
  --test
    --SimpleJUnitTest.java

Я также скопировал build.xml в tst и запустил его из командной строки из этого каталога, результат тот же.

Я скопировал junit.jar в% ant_home% \ lib без какого-либо эффекта, хотя, когда я вынул строку pathelement из пути к классам, я получил сообщение «for должен включать junit.jar, если не находится в собственном пути к классам Ant». Я не уверен, где указан «собственный путь к классам Ant». Блок пути к классам с новым сообщением об ошибке следующий:

<classpath>
  <pathelement location="c:/users/995868/apache-ant-1.9.4/lib" />
  <pathelement location="../bin" />
</classpath>

Я нигде не использую функции hamcrest, поэтому я не нашел и не вставил их. Я пытался сделать простой пример, и в документации для junit под ant (по крайней мере) не упоминается, что hamcrest необходим.


person arcy    schedule 17.03.2015    source источник
comment
Дополнительная информация: я подумал, что, возможно, сам тестовый класс не может быть найден; Я скопировал build.xml в каталог bin и убедился, что в bin находится test \ SimpleJUnitTest.class. Я изменил расположение пути к классам, поскольку bin находится в другом месте относительно junit.jar. Поскольку я не вижу каталог bin в eclipse, я просто запустил ant из командной строки с рабочим каталогом, установленным на bin. Тот же результат.   -  person arcy    schedule 18.03.2015


Ответы (2)


Я полагаю, вам не хватает hamcrest-core.jar в пути к классам ant.

РЕДАКТИРОВАТЬ: и вам также не хватает самого класса тестового файла в пути к классам. Итак, вам нужно обновить путь к классам следующим образом:

<classpath>
  <pathelement location="bin"/> <!--here is your test class-->
  <pathelement location="lib/hamcrest-core-1.3.jar"/> 
  <pathelement location="lib/junit-4.12.jar"/> 
</classpath>
person Sergey Pauk    schedule 17.03.2015
comment
Я пробовал это (с поправкой на то, что мой файл сборки находится в корзине), но получаю тот же результат. Я получаю тот же результат, когда запускаю ant из командной строки, и даже после удаления файла SimpleJUnitTest.class. Я думаю, что JUnit jar должен быть найден, потому что вывод указывает, что он находит задачу [junit] и задачу [echo]. Но по какой-то причине он не находит файл класса. - person arcy; 18.03.2015
comment
Вышеупомянутый скрипт был протестирован на отсутствие ошибок. Я считаю, что у вас все еще есть проблемы с расположением путей к классам. Не могли бы вы предоставить структуру каталогов вашего проекта, в частности, где находятся junit, hamcrest и ваш тестовый класс? Не могли бы вы также предоставить <classpath> блок вашего обновленного скрипта? - person Sergey Pauk; 18.03.2015
comment
Мои извинения, вы сделали снимок - я загрузил hamcrest-all-1.3.jar и поместил его в слот библиотеки проекта, скорректировал расположение элементов для этого и junit.jar, и ошибка исчезла. Однако теперь текст System.out.println () не отображается в консоли eclipse - это должно быть? Текст эха все еще отображается. - person arcy; 18.03.2015
comment
Вы должны добавить атрибут showoutput="true" к <junit> - person Sergey Pauk; 18.03.2015

В вашем классе нет тестов, что является ошибкой. Ваша аннотация @Test будет проигнорирована, поскольку вы не указали @RunWith, который будет ее использовать, поэтому JUnit ищет методы с именем "test ...".

Итак, у вас есть два варианта:

а) Переименуйте свой метод в «testSomething» или аналогичный.

б) Добавьте @RunWith (BlockJUnit4ClassRunner.class) над определением вашего класса.

Оба способа гарантируют, что в вашем классе существует хотя бы один тест, либо через соглашение об именах (a), либо через аннотацию (b).

person Florian Schaetz    schedule 17.03.2015
comment
Если бы не было действительного теста, я бы подумал, что запуск класса как теста JUnit не удастся, но (как я уже сказал) это не так. Я сделал и то, и другое: переименовал метод в testDoTest () и запустил его, получив ту же ошибку; затем я помещаю @RunWith (BlockJUnit4ClassRunner.class) над строкой, начинающей общедоступный класс, позволяю eclipse найти два импорта, которые мне тогда понадобились, и запускал его снова, получая ту же ошибку. Спасибо за попытку, но ни одно из этих предложений не меняет поведения. - person arcy; 18.03.2015