2013-11-18 6 views
36

Итак, я новичок в JUnit, и мы должны использовать его для задания домашней работы. Наш профессор дал нам проект, который имеет один тестовый класс, BallTest.java. Когда я нажимаю правой кнопкой мыши> Выполнить как> Тест JUnit, я получаю всплывающее сообщение об ошибке «Нет тестов JUnit». Я знаю, что на этот вопрос был дан ответ (No tests found with test runner 'JUnit 4'), но закрытие затмения, перезапуск, очистка и построение не работают. Ниже приведены скриншоты моей конфигурации запуска, пути сборки и класса, который я пытаюсь проверить.«Нет тестов JUnit» в Eclipse

Run Configuration Build Path

BallTest.java

import static org.junit.Assert.*; 
import junit.framework.Assert; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 

public class BallTest { 

Ball ball; 

/** 
* @throws java.lang.Exception 
*/ 
@Before 
public void setUp() throws Exception { 
    System.out.println("Setting up ..."); 
    Point2D p = new Point2D(0,0); 
    ball = new Ball(p); 
} 

/** 
* @throws java.lang.Exception 
*/ 
@After 
public void tearDown() throws Exception { 
    System.out.println("Tearing down ..."); 
    ball = null; 
} 

/** 
* Test method for {@link Ball#getCoordinates()}. 
*/ 
@Test 
public void testGetCoordinates() { 
    assertNotNull(ball); // don't need Assert. because of the import statement above. 
    Assert.assertEquals(ball.getCoordinates().getX(), 0); 
    Assert.assertEquals(ball.getCoordinates().getY(), 0); 
} 

/** 
* Test method for {@link Ball#setCoordinates(Point2D)}. 
*/ 
@Test 
public void testSetCoordinates() { 
    Assert.assertNotNull(ball); 
    Point2D p = new Point2D(99,99); 
    ball.setCoordinates(p); 
    Assert.assertEquals(ball.getCoordinates().getX(), 99); 
    Assert.assertEquals(ball.getCoordinates().getY(), 99); 
} 

/** 
* Test method for {@link Ball#Ball(Point2D)}. 
*/ 
@Test 
public void testBall() { 
    Point2D p = new Point2D(49,30); 
    ball = new Ball(p); 
    Assert.assertNotNull(ball); 
    Assert.assertEquals(ball.getCoordinates().getX(), 49); 
    Assert.assertEquals(ball.getCoordinates().getY(), 30); 

    //fail("Not yet implemented"); 
} 

public static void main (String[] args) { 
     Result result = JUnitCore.runClasses(BallTest.class); 
     for (Failure failure : result.getFailures()) { 
       System.out.println(failure.toString()); 
      } 
     System.out.println(result.wasSuccessful()); 
} 

} 
+0

Вам не нужно расширять TestCase? – iberbeu

+1

@iberbeu Не для JUnit 4 - это большая аннотация. –

+2

Что нужно для создания класса 'main' для выполнения ваших тестов? Вы получаете всю эту информацию, когда она терпит неудачу/все равно. –

ответ

52

Это установил его :

Щелкните правой кнопкой мыши по папке «Тест»> «Путь сборки»> «Использовать в качестве исходной папки».

Я не совсем понимаю, почему, может кто-нибудь прокомментировать это?

+5

Если у вас нет папки «test» в качестве исходной папки, eclipse не будет искать код там – iberbeu

+0

Возможно, вы захотите попробовать перезапустить eclipse, если это не исправит, как говорит ответ @khylo. –

4

Похоже, вы пропустили определение Бегун на тестовом классе, что может быть причиной:

import org.junit.runners.JUnit4; 
@RunWith(JUnit4.class) 
public class BallTest { 
... 
} 
+0

Я не знал о псевдониме Juni4 runner. Я всегда указывал имя класса runner. – dkatzel

+0

Вы имеете в виду импорт префикса пакета для JUnit4? Если это так, я знаю, что вы имеете в виду, Eclipse не будет автоматически импортировать пакет для вас, если в аннотации будет единственная ссылка на 'JUnit4'. Он быстро стареет, если у вас много тестовых классов, как я. – Klazen108

+2

Я надеялся, что так оно и будет, но, к сожалению, я все равно получаю ту же ошибку. – iaacp

14

Если ни один из других ответов не работает для вас, вот что сработало для меня.

Restart затмить

Я исходная папка настроена правильно, и модульные тесты правильно аннотированный, но по-прежнему получать «не найдено JUnit тестов», для одного проекта. После перезагрузки он сработал. Я использовал STS 3.6.2 на основе eclipse Luna 4.4.1

+0

1.В папке src по умолчанию должны присутствовать основные и тестовые папки. Если нет, создайте тестовую папку, затем напишите тестовые примеры/комплекты. 2. После создания case/suites перейдите в Debug или Run configurations и добавьте тестовый пример JUnit в меню Test (Если вы его не нашли, добавьте JUnit в путь сборки). 3. Затем, как предложил хыло, перезапустите затмение. Счастливые испытания. –

3

У меня была такая же проблема и решена вот так: Я удалил аннотацию @Test и перепечатал ее. Это просто сработало, я понятия не имею, почему.

+0

Спасибо, это сработало и для меня :) – Guru

+0

Благодарность за это безумное решение: D, который работает как шарм, hehehe –

+0

странный - тоже работал для меня – geneSummons

8

правой кнопкой мыши -> путь построения -> удалить из пути сборки , а затем добавить его -> Щелкните правой кнопкой мыши по папке с именем «Тест»> «Путь сборки»> «Использовать как исходную папку».

0

Конфигурация запуска для тестового класса может создать еще одну причину (и решение) для этой проблемы.

Если вы перейдете к настройкам запуска (или отладки) (используя cmd-3 или нажав на маленькие кнопки раскрывающегося списка на панели инструментов), вы можете увидеть конфигурацию, созданную для каждого тестируемого класса, с которым вы работали. Я обнаружил, что один из моих классов, который не запускался, имел конфигурацию запуска, где поле метода тестирования каким-то образом случайно заполнилось. Я должен был это понять, чтобы заставить его работать. При очистке он показывает (все методы) в светлом тексте.

Я добавлю, что странно - может быть, произошло что-то еще, - это также не сработало для меня, пока я не установил поле «Имя», чтобы он включал только имя класса, как и другой запуск JUnit конфигурации.

1

Я решил проблему, настроив путь построения. Щелкните правой кнопкой мыши по проекту (или любой из подпапок) -> Путь сборки -> Настроить путь сборки. Когда откроется окно свойств, щелкните вкладку «Источник» и добавьте папки src и tst. Но это не помогло мне. Странно, мне пришлось повторять аннотации. (Project-> clean или restart также мог бы работать).

2

Любое решение не сработало для меня, пока я не изменю имя моего метода тестирования. Когда имя метода тестирования начинается с «теста», это нормально. Я новичок в программировании для Android, и для меня это был большой сюрприз.

2

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

  1. Добавить свое имя пакета в java build path->source

  2. Переместить ваш package/class в src папку

У меня такая же проблема и решена таким образом, оба решения работают нормально.

0

Эта проблема возникла при обновлении проектов через версии eclipse. Напр. junits, хорошо работающий в Mars2.0, не работал на Neon. Следующие работали для меня.

  1. Удалить папку .settings. Импортируйте проект в eclipse.
  2. Удалить исходные папки. Затем снова используйте папки в качестве исходных папок. например, удалить src/main/java из пути сборки в качестве исходной папки. -> Ok -> Снова сделайте эту папку исходной папкой. Повторите это для основных/ресурсов, тест/Java, тест/ресурсы
2
  1. правой кнопкой мыши проект -> свойства-> Java Build Path и перейдите на вкладку Source затем добавить папку тест Src.
  2. меню Выбор проекта и отмените «Build Automatically» вариант, если выбран
  3. Выберите Clean, а затем выберите «Build Automatically» вариант
  4. перезапуска Eclipse, и запустить JUnit.
0

Я использовал @RunWith(Parameterized.class), но пропустил добавить @Parameters аннотации в методе общественной статических параметров. После добавления аннотации он работал.

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