Подтвердить что ты не робот

Неисследованные тесты

При выполнении всех моих тестов в Eclipse (Eclipse 3.4 "Ganymede" ) один тест указан в разделе "Unrooted Tests". Я использую Junit 3.8, и этот конкретный тест расширяет TestCase. Я не вижу никакой разницы между этим тестом и другими тестами. Я не помню, чтобы это происходило в Eclipse 3.3 (Europa).

Разъяснение:

Мы еще не перешли на JUnit 4.0, поэтому мы не используем аннотации. Я также искал googled, и похоже, что у большинства людей были проблемы с JUnit 4, но я не видел никаких решений. На этом этапе тест проходит как локально, так и в CruiseControl, поэтому я не слишком обеспокоен, но любопытно.

Когда я впервые увидел это, он был на неудачном тесте, который был неудачен только при запуске с другими тестами. Это привело меня к кроличьей дыре, которая искала решение проблемы "Unroot", которую я так и не нашел. В конце концов я нашел виновника в другом тесте, который не был должным образом разрушен.

Я согласен, это похоже на проблему Eclipse.

4b9b3361

Ответ 1

Наконец, я нашел решение. Проблема в том, что вы не определяете свои тестовые примеры, используя аннотации, но все еще делаете это "старым способом". Как только вы перейдете к использованию аннотаций, вы сможете запускать один тест за раз.

Вот пример того, как должен выглядеть базовый тест с помощью аннотаций:

import static org.junit.Assert.*; // Notice the use of "static" here
import org.junit.Before;
import org.junit.Test;

public class MyTests { // Notice we don't extent TestCases anymore

  @Before
  public void setUp() { // Note: It is not required to call this setUp()
    // ...
  }

  @Test
  public void doSomeTest() { // Note: method need not be called "testXXX"
    // ...
    assertTrue(1 == 1);
  }
}

Ответ 2

Я также получил сообщение об ошибке "unrooted tests", и оно ушло магически. Я считаю, что это было связано с тем, что я использовал Eclipse с проектом Maven. Когда я добавил новый метод в свой тестовый класс и дал ему аннотацию @Test, он начал получать сообщение об ошибке, когда я пытался запустить этот метод, используя опцию "Run as Junit test"; однако, как только я запустил maven build, сообщение об отключенных тестах исчезло, и я считаю, что это решение проблемы в будущем.

Запустите maven build, потому что он обновит класс, который использует JUnit.

Ответ 3

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

Ответ 4

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

Ответ 5

Мы решили проблему, убедившись, что наш тестовый проект построен. У нас возникла проблема в пути сборки, который не позволил бы скомпилировать наш тестовый класс. Как только мы разрешили проблему пути сборки, скомпилированный тест и "новый" метод могли быть запущены. Поэтому мы можем предположить, что тесты "Unrooted" также означают, что они не существуют в скомпилированном двоичном файле.

Ответ 6

Я никогда не видел этого, но насколько я могу судить по тому, как скрыть Google в течение нескольких минут, это выглядит так, как будто это может быть ошибка в Eclipse, а не проблема с вашим тестом. Думаю, у вас нет аннотации @Test на тесте? Можете ли вы пропустить тест и воссоздать его, и если это так, вы получите ту же ошибку?

Ответ 7

Еще один сценарий, который вызывает эту проблему, - это слепое копирование/вставка метода, который требует параметра. то есть.

import org.junit.Test;

public class MyTest {

    @Test
    public void someMethod(String param) {
          // stuff
    }

}

У вас есть несколько простых решений:

  • определить переменную в конкретном методе тестирования

  • добавить его в качестве переменной экземпляра в класс проверки

  • создайте метод установки и отметьте его с помощью @Before

Ответ 8

Для меня это связано с тем, что проект получил проблемы с построением пути. Моя конфигурация зависимостей maven должна быть обновлена.

Ответ 9

У меня была эта проблема и поместив один " @Test", прежде чем метод тестирования разрешил это!

вот так:

@Test public void testOne() { // ... assertTrue(1 == 1); }

Ответ 10

Это два сценария появления ошибок Unrooted.

  • Если вы пропустили аннотацию @Test перед тестом.

    @Test

    public void foo() {  }

  • Если это проект Gwt и когда определены два макета одного и того же объекта. Допустим, что существует класс Class A и

    @GwtMock  частный атест;

    @GwtMock  частный A a; Тогда это также покажет ошибку с открытым исходным кодом.

Ответ 11

Я мог бы исправить проблему, перейдя с TestRunner версии 4.0 на 3 в конфигурации запуска для отдельного метода тестирования.

Ответ 12

Не расширяйте junit.framework.TestCase в своем тестовом классе с помощью junit1.4, и это должно решить проблему.

Ответ 13

Вы используете Hamcrest? или другую библиотеку, чтобы помочь в вашем тестировании?. Вы не используете

import static org.junit.Assert.*;

Проверьте, используете ли вы в своем тесте:

import static org.hamcrest.MatcherAssert.assertThat;

или другое утверждение не утверждают JUnit.

Ответ 14

Оказалось, что у моего пути сборки была некоторая ошибка... некоторые банки отсутствовали. Я переконфигурировал путь сборки, и он сработает!

Ответ 15

Для меня проблема заключалась в том, что исключение было выбрано в методах @BeforeClass или @AfterClass. Это также приведет к тому, что тесты будут классифицированы как неработающие.

Ответ 16

Я получил эту ошибку с именем метода тестирования как "test"

@Test 
public void test() {
 // ... assertTrue(1 == 1); 
}

Я переименовал метод и работал

Ответ 17

Я столкнулся с этой проблемой, не объявив тест static.

Ответ 18

Еще одна вещь, которую вы можете попробовать, - это обновить версию JUnit до 4.12.

Я некоторое время испытывал эту проблему с классом, который расширил тот, который использовал @RunWith (Parameterized.class).

Через некоторое время, и мне жаль, что я не знаю точно, что я сделал, чтобы вызвать это, сообщение "Unrooted Tests" исчезло, но тест все еще не работал правильно. Конструктор, который должен был принимать аргументы из метода @Parameters, никогда не вызывался; исполнение прыгало прямо с @BeforeClass на @AfterClass.

Исправление этой проблемы состояло в том, чтобы обновить JUnit из 4.8.1, который он использовал, до последней версии (4.12). Возможно, это может помочь кому-то еще в будущем.

Ответ 20

Возможно, это просто логическая путаница в отношении цели метода. Помните:

например. правильный тегированный метод тестирования:

@Test
@Transactional
@Rollback(true)
public void testInsertCustomer() {  
    (...)
}

-With плагин Eclipse Junit, вы можете запустить этот тестовый метод с помощью контекстного меню над методом (например, в проводнике пакетов, расширяющем класс и методы и выбрав метод testInsertCustomer() ", и из этого пункта выберите" Запустить как → JUnit test ").

Если вы забыли тег "@Test" или просто этот метод не является тестом, но (частный или нет) общий метод для использования в качестве утилиты для других тестов (например, "private fillCustomerObject()" ), тогда метод не требует тега @Test, и просто вы не можете запустить его как тест JUnit!

Легко, что вы можете создать метод утилиты, а позже вы забыли реальную цель этого метода, поэтому, если вы попытаетесь запустить его как тест, JUnit будет кричать "Unrooted Tests".