Используется ли новый (или другой) экземпляр объекта TestCase для запуска каждого метода тестирования в тестовом примере JUnit? Или один экземпляр используется повторно для всех тестов?
public class MyTest extends TestCase {
public void testSomething() { ... }
public void testSomethingElse() { ... }
}
Сколько экземпляров класса MyTest создается при выполнении этого теста?
Если возможно, предоставьте ссылку на документ или исходный код, где я могу проверить поведение.




Да, отдельный экземпляр создается.
Во время выполнения этого теста создается 2 экземпляра MyTest.
Если вам нужно другое поведение, можно использовать аналогичный инструмент под названием TestNG (http://testng.org/doc/).
Вы можете легко проверить это, предоставив конструктор и добавив к нему System.out.println.
Если вы спрашиваете об этом, потому что обеспокоены инициализацией и повторной инициализацией данных в вашем конструкторе, имейте в виду, что предписанный способ инициализации данных ваших тестовых примеров - исключительно через setUp () и tearDown ().
Я не смог найти четкого ответа на ваш вопрос в документации JUnit, но намерение, как написал anjanb, состоит в том, чтобы каждый тест был независимым от других, поэтому для каждого теста, который будет запускаться, можно создать новый экземпляр TestCase.
Если у вас есть дорогостоящая тестовая установка («приспособления»), которую вы хотите использовать во всех тестовых примерах в тестовом классе, вы можете использовать аннотацию @BeforeClass для статического метода для достижения этого результата: http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html. Однако обратите внимание, что новый экземпляр может быть создан для каждого теста, но это не повлияет на статические данные, инициализированные вашим методом @BeforeTest.
@BeforeClass недоступен в JUnit 3. Эквивалент описан здесь: stackoverflow.com/questions/3023091/…
На каждый тестовый запуск приходится по одному экземпляру. Пытаться
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
Да, безусловно. Я обнаружил, что данные, которые я храню в переменных экземпляра, не могут быть доступны между тестами из-за этой конструкции.
Спасибо за быстрый ответ. Не могли бы вы также предоставить ссылку на документ или исходный код, где я могу проверить это поведение?