Неисследованные тесты
При выполнении всех моих тестов в Eclipse (Eclipse 3.4 "Ganymede" ) один тест указан в разделе "Unrooted Tests". Я использую Junit 3.8, и этот конкретный тест расширяет TestCase. Я не вижу никакой разницы между этим тестом и другими тестами. Я не помню, чтобы это происходило в Eclipse 3.3 (Europa).
Разъяснение:
Мы еще не перешли на JUnit 4.0, поэтому мы не используем аннотации. Я также искал googled, и похоже, что у большинства людей были проблемы с JUnit 4, но я не видел никаких решений. На этом этапе тест проходит как локально, так и в CruiseControl, поэтому я не слишком обеспокоен, но любопытно.
Когда я впервые увидел это, он был на неудачном тесте, который был неудачен только при запуске с другими тестами. Это привело меня к кроличьей дыре, которая искала решение проблемы "Unroot", которую я так и не нашел. В конце концов я нашел виновника в другом тесте, который не был должным образом разрушен.
Я согласен, это похоже на проблему Eclipse.
Ответы
Ответ 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). Возможно, это может помочь кому-то еще в будущем.
Ответ 19
У меня была такая же проблема с
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
вам нужен кувшин.
тот же вопрос 14539072: java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
Ответ 20
Возможно, это просто логическая путаница в отношении цели метода. Помните:
например. правильный тегированный метод тестирования:
@Test
@Transactional
@Rollback(true)
public void testInsertCustomer() {
(...)
}
-With плагин Eclipse Junit, вы можете запустить этот тестовый метод с помощью контекстного меню над методом (например, в проводнике пакетов, расширяющем класс и методы и выбрав метод testInsertCustomer() ", и из этого пункта выберите" Запустить как → JUnit test ").
Если вы забыли тег "@Test" или просто этот метод не является тестом, но (частный или нет) общий метод для использования в качестве утилиты для других тестов (например, "private fillCustomerObject()" ), тогда метод не требует тега @Test, и просто вы не можете запустить его как тест JUnit!
Легко, что вы можете создать метод утилиты, а позже вы забыли реальную цель этого метода, поэтому, если вы попытаетесь запустить его как тест, JUnit будет кричать "Unrooted Tests".