Создание экземпляра объекта JUnit TestCase - PullRequest
9 голосов
/ 08 октября 2008

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

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

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

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

Ответы [ 5 ]

8 голосов
/ 08 октября 2008

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

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

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

4 голосов
/ 08 октября 2008

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

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

3 голосов
/ 08 октября 2008

Есть один экземпляр для каждого теста. Попробуйте

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

2 голосов
/ 08 октября 2008

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

0 голосов
/ 08 июля 2010

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

...