Некорневые тесты

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

Уточнение:

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

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

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

Для будущих читателей, которые могут сюда попасть, я получал ошибку некорневых тестов в JUnit4 при использовании метода @Theory без добавления @RunWith(Theories.class) в подпись класса.

Daniel 11.03.2016 14:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
31
1
48 177
23

Ответы 23

Я никогда не видел этого, но, насколько я могу судить, бегло просматривая 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 запускает все остальные тесты как некорневые тесты перед запуском отдельного теста. Я хочу его запустить.

SonalKhodiyar 08.11.2013 04:11

Я забыл добавить аннотацию @Test

Mike R 27.03.2014 21:08

У меня было возвращаемое значение в методе; установка этого значения на недействительность разрешила запуск теста

ununiform 20.11.2014 22:51

Вот и все! Отсутствует аннотация @Test

Siddhartha 27.03.2015 00:15

Я мог решить эту проблему, перейдя с 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
    }

}

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

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

  2. добавить его как переменную экземпляра в тестовый класс

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

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

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

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

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

Это тоже была моя проблема. Перейдите к Run Configurations..., найдите запись в JUnit, щелкните Search... по Test method и выберите (all methods) (или любой другой метод, который вы хотите запустить). Возможно, переименуйте конфигурацию запуска, чтобы не забыть, какая это.

davidfmatheson 21.04.2014 18:28

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

нравится:

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

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

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

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

Это два сценария, в которых появляются некорневые ошибки.

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

    @Тестовое задание

    public void foo () { }

  2. Если это проект 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)

Другие вопросы по теме