2008-10-08 2 views
9

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

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

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

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

ответ

4

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

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

8

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

При запуске этого теста создаются 2 экземпляра MyTest.

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

+0

Спасибо за быстрый ответ. Можете ли вы также указать ссылку на документ или исходный код, где я могу проверить это поведение? – Manki 2008-10-08 01:59:50

+0

Вы можете легко проверить его, предоставив конструктор и добавив к нему System.out.println. – 2008-10-08 08:08:54

2

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

3

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

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

0

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

Смежные вопросы