При запуске всех моих тестов в Eclipse (Eclipse 3.4 'Ganymede') один тест отображается в разделе «Некорневые тесты». Я использую Junit 3.8, и этот конкретный тест расширяет TestCase. Я не вижу разницы между этим тестом и другими тестами. Я не помню, чтобы такое происходило в Eclipse 3.3 (Европа).
Уточнение:
Мы еще не перешли на JUnit 4.0, поэтому аннотации не используем. Я также погуглил, и казалось, что у большинства людей были проблемы с JUnit 4, но я не видел никаких решений. На данный момент тест проходит как локально, так и в CruiseControl, поэтому я не особо обеспокоен, но мне любопытно.
Однако, когда я впервые увидел это, это был неудачный тест, который не удался только при запуске с другими тестами. Это привело меня к кроличьей норе в поисках решения проблемы «без корней», которую я так и не нашел. В конце концов я нашел виновного в другом тесте, который не разбирался должным образом.
Я согласен, это похоже на проблему с Eclipse.




Я никогда не видел этого, но, насколько я могу судить, бегло просматривая Google в течение нескольких минут, похоже, что это может быть ошибка в Eclipse, а не проблема с вашим тестом. Полагаю, у вас нет аннотации @Test к тесту? Можете ли вы уничтожить тест и воссоздать его, и если да, то получите ту же ошибку?
Если ваш класс расширяет TestCase где-то в своей иерархии, вы должны использовать средство запуска тестов JUnit 3, указанное в раскрывающемся списке под конфигурациями запуска. Использование бегуна JUnit 4 (я полагаю, по умолчанию) вызывает это некорневое явление тестирования.
Наконец я нашел решение. Проблема в том, что вы не определяете свои тестовые примеры с помощью аннотаций, но по-прежнему делаете это «старым способом». Как только вы перейдете на использование аннотаций, вы снова сможете запускать по одному тесту.
Вот пример того, как теперь должен выглядеть базовый тест с использованием аннотаций:
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);
}
}
Я делаю это с помощью аннотаций, но у меня все равно возникает та же проблема. eclipse запускает все остальные тесты как некорневые тесты перед запуском отдельного теста. Я хочу его запустить.
Я забыл добавить аннотацию @Test
У меня было возвращаемое значение в методе; установка этого значения на недействительность разрешила запуск теста
Вот и все! Отсутствует аннотация @Test
Я мог решить эту проблему, перейдя с TestRunner версии 4.0 на 3 в конфигурациях запуска для отдельного метода тестирования.
Не расширяйте junit.framework.TestCase в своем тестовом классе с помощью junit1.4, и это должно решить проблему.
Вы используете Hamcrest? или другая библиотека, чтобы помочь в вашем тесте ?. Вы не используете
import static org.junit.Assert.*;
Проверьте, используете ли вы в своем тесте:
import static org.hamcrest.MatcherAssert.assertThat;
или другое утверждение - это не утверждение JUnit.
Я также получал сообщение об ошибке «некорневые тесты», и оно исчезло волшебным образом. Я считаю, что это произошло из-за того, что я использовал Eclipse с проектом Maven. Когда я добавил новый метод в свой класс Test и дал ему аннотацию @Test, он начал получать сообщение об ошибке, когда я пытался запустить этот метод с помощью параметра меню «Запуск от имени Junit test»; однако, как только я запустил сборку maven, сообщение о некорневых тестах исчезло, и я считаю, что это решение проблемы в будущем.
Запустите сборку maven, потому что она обновит класс, который использует JUnit.
Мы решили проблему, убедившись, что наш тестовый проект построен. У нас была проблема в пути сборки, которая не позволяла скомпилировать наш тестовый класс. Как только мы решили проблему пути сборки, тест был скомпилирован и «новый» метод был запущен. Таким образом, мы можем предположить, что тесты «без корневого доступа» также означают, что они не существуют в скомпилированном двоичном файле.
Другой сценарий, который вызывает эту проблему, - я слепо скопировал / вставил метод, который требуется параметр. т.е.
import org.junit.Test;
public class MyTest {
@Test
public void someMethod(String param) {
// stuff
}
}
У вас есть несколько простых решений:
определить переменную в конкретном методе тестирования
добавить его как переменную экземпляра в тестовый класс
создать метод установки и аннотировать его с помощью @Before
Оказалось, что в моем пути сборки была ошибка ... некоторые банки отсутствовали. Я перенастроил путь сборки, и он сработал!
Для меня проблема заключалась в том, что в методах @BeforeClass или @AfterClass было выброшено исключение. Это также приведет к тому, что тесты будут классифицированы как некорневые.
Для меня это было связано с тем, что у проекта возникли проблемы с путями сборки. Моя конфигурация зависимостей maven нуждается в обновлении.
Я получил эту ошибку, потому что я переименовал свой тестовый метод, а затем попытался запустить тест в Eclipse, щелкнув ту же конфигурацию запуска - ссылаясь на старый метод, которого сейчас не существовало.
Это тоже была моя проблема. Перейдите к Run Configurations..., найдите запись в JUnit, щелкните Search... по Test method и выберите (all methods) (или любой другой метод, который вы хотите запустить). Возможно, переименуйте конфигурацию запуска, чтобы не забыть, какая это.
У меня была эта проблема, и я поставил один "@Тестовое задание" до того, как метод тестирования решил ее!
нравится:
@Test
public void testOne() { // ...
assertTrue(1 == 1);
}
Я получил эту ошибку с именем метода тестирования как "test"
@Test
public void test() {
// ... assertTrue(1 == 1);
}
Я переименовал метод, и он сработал
Это два сценария, в которых появляются некорневые ошибки.
Если вы пропустили аннотацию @Test перед тестом.
@Тестовое задание
public void foo () { }
Если это проект Gwt и определены два макета одного и того же объекта. Допустим, есть один класс Class A и
@GwtMock частный Атест;
@GwtMock частный A a; Тогда это также покажет ошибку теста Unrooted.
Я столкнулся с этой проблемой, не объявив тест static.
Еще вы можете попробовать обновить свою версию JUnit как минимум до 4.12.
Некоторое время я испытывал эту проблему с расширенным классом, который использовал @RunWith (Parameterized.class).
Через некоторое время, и мне очень жаль, что я точно не знаю, что именно я сделал, чтобы вызвать это, сообщение «Тесты без корневого доступа» исчезло, но тест по-прежнему работал некорректно. Конструктор, который должен был принимать аргументы от метода @Parameters, так и не был вызван; выполнение перескочило прямо с @BeforeClass на @AfterClass.
Исправление этой проблемы заключалось в обновлении JUnit с версии 4.8.1, которую он использовал, до последней версии (4.12). Так что, возможно, это может помочь кому-то другому в будущем.
У меня была такая же проблема с java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing
Вам понадобится хамкрест из фляги. тот же вопрос 14539072: java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing
Может быть, это просто логическая путаница в отношении цели метода. Вспомним:
Например. правильный метод тестирования с тегами:
@Test
@Transactional
@Rollback(true)
public void testInsertCustomer() {
(...)
}
-С помощью подключаемого модуля Eclipse Junit вы можете запустить этот тестовый метод с помощью контекстного меню над методом (например, в проводнике пакетов, развернув класс и методы и выбрав метод «testInsertCustomer ()», а в этом элементе выберите «Запуск от имени >> JUnit test») .
Если вы забыли тег «@Test» или просто метод не является тестом, а является (частным или нет) общим методом для использования в качестве утилиты для других тестов (например, «private fillCustomerObject ()»), тогда метод не требуется тег "@Test", и вы просто не можете запустить его как тест JUnit!
Легко создать служебный метод, а позже вы забыли настоящую цель этого метода, поэтому, если вы попытаетесь запустить его как тест, JUnit закричит «Тесты без корневого доступа».
Для меня эта проблема возникла из-за исключения в реальном времени, созданного в методе @AfterClass (см. Документацию в здесь):
Практически все методы тестирования прошли успешно, но в конце класса этот метод дал сбой. Таким образом, все тесты кажутся хорошими, но на моем Eclipse был неудачный дополнительный «некорневой тест».
Я получил эти ошибки для проекта maven. Я перестроил проект с помощью mvn clean install, и проблема была решена
На самом деле он сказал мне, что есть тест с аннотацией: @RunWith (MockitoJUnitRunner.class)
Для будущих читателей, которые могут сюда попасть, я получал ошибку некорневых тестов в JUnit4 при использовании метода
@Theoryбез добавления@RunWith(Theories.class)в подпись класса.