2015-03-17 2 views
0

У меня есть следующий тест JUnit в затмении:Проблема Запуск простой JUnit тест через Ant на затмение

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> 

Если я бегу в классе «Run As ...» и выберите JUnit, он работает без ошибок. Если я бегу build.xml под «Run As ...» и выберите 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 

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

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

EDIT:

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 из пути к классам, я получил сообщение «The must должен включать junit.jar, если нет в собственной траектории пути Ant ». Я не уверен, где указан «путь к классу Ant». Блок с пути к классам нового сообщения об ошибке в следующем:

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

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

+0

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

ответ

2

Предполагаю, что вам не хватает hamcrest-core.jar от вашего муравья classpath.

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

<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> 
+0

Я пробовал это (с учетом того, что мой файл сборки находится в корзине), но я получаю тот же результат. Я получаю тот же результат, когда я запускаю ant из командной строки и даже после удаления файла SimpleJUnitTest.class. Я думаю, что JUnit jar должен быть найден, потому что вывод указывает, что он находит задачу [junit] и задачу [echo]. Но по какой-то причине он не находит файл класса. – arcy

+0

Сценарий, описанный выше, был протестирован, чтобы не дать никаких сбоев. Я считаю, что у вас все еще есть проблемы с вашими местами маршрутов. Не могли бы вы представить структуру каталогов вашего проекта, в частности, где находятся junit, hamcrest и ваш тестовый класс? Не могли бы вы также предоставить блок '' вашего обновленного skript? –

+0

Приносим извинения, вы вызвали выстрел - я загрузил hamcrest-all-1.3.jar и поместил его в слот библиотеки проекта, а также скорректировал местоположения патчей для этого и junit.jar, и ошибка исчезла. Теперь, однако, текст System.out.println() не отображается в консоли eclipse - он должен? Текст эха все еще появляется там. – arcy

0

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

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

а) переименовывать метод «testSomething» или подобное.

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

Оба способа будет гарантировать, что по крайней мере один тест существует в классе, либо с помощью именования (а) или через annotion (б).

+0

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

Смежные вопросы