Создание экземпляра объекта JUnit TestCase

Используется ли новый (или другой) экземпляр объекта TestCase для запуска каждого метода тестирования в тестовом примере JUnit? Или один экземпляр используется повторно для всех тестов?

public class MyTest extends TestCase {
  public void testSomething() { ... }
  public void testSomethingElse() { ... }
}

Сколько экземпляров класса MyTest создается при выполнении этого теста?

Если возможно, предоставьте ссылку на документ или исходный код, где я могу проверить поведение.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
9
0
5 677
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Да, отдельный экземпляр создается.

Во время выполнения этого теста создается 2 экземпляра MyTest.

Если вам нужно другое поведение, можно использовать аналогичный инструмент под названием TestNG (http://testng.org/doc/).

Спасибо за быстрый ответ. Не могли бы вы также предоставить ссылку на документ или исходный код, где я могу проверить это поведение?

Manki 08.10.2008 05:59

Вы можете легко проверить это, предоставив конструктор и добавив к нему System.out.println.

André 08.10.2008 12:08

Если вы спрашиваете об этом, потому что обеспокоены инициализацией и повторной инициализацией данных в вашем конструкторе, имейте в виду, что предписанный способ инициализации данных ваших тестовых примеров - исключительно через setUp () и tearDown ().

Ответ принят как подходящий

Я не смог найти четкого ответа на ваш вопрос в документации JUnit, но намерение, как написал anjanb, состоит в том, чтобы каждый тест был независимым от других, поэтому для каждого теста, который будет запускаться, можно создать новый экземпляр TestCase.

Если у вас есть дорогостоящая тестовая установка («приспособления»), которую вы хотите использовать во всех тестовых примерах в тестовом классе, вы можете использовать аннотацию @BeforeClass для статического метода для достижения этого результата: http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html. Однако обратите внимание, что новый экземпляр может быть создан для каждого теста, но это не повлияет на статические данные, инициализированные вашим методом @BeforeTest.

@BeforeClass недоступен в JUnit 3. Эквивалент описан здесь: stackoverflow.com/questions/3023091/…

Peter Wippermann 03.09.2014 21:19

На каждый тестовый запуск приходится по одному экземпляру. Пытаться

public class MyTest extends TestCase {
  public MyTest() { System.out.println("MyTest Constructor");
  public void setUp() { System.out.println("MyTest setUp");
  public void tearDown() { System.out.println("MyTest tearDown");
  public void testSomething() { System.out.println("MyTest testSomething");
  public void testSomethingElse() { System.out.println("MyTest testSomethingElse");
}

Исходный код (в том числе для более новых версий - ваш и мой пример - Junit 3) находится на http://www.junit.org

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

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