@nick_volynkin
Java-разработчик

Как запускать серию тестов JUnit строго последовательно?

Есть серия тестов. Я хочу, чтобы они использовали некоторый разделяемый объект. Первый тест его вычисляет, второй (и последующие) требуют его для своей работы. Похоже, что по умолчанию тесты запускаются в раздельных потоках и первый тест не успевает выполниться к началу второго.
Про @Before знаю, не подходит, т.к. на каждый тест навешивается еще benchmark и первый тест не хочу оставлять без него.

Вопрос: как явным образом указать, что все тесты выполняются последовательно или после первого?

/** shared object */
Object a;

@Test() //succeeds
public void testFoo() {
    a = foo();
    Assert.assertNotNull(a);
}

@Test()
public void testBar() {
    Assert.assertNotNull(a); //fails
    b = bar(a); //null pointer exception
}
  • Вопрос задан
  • 2096 просмотров
Решения вопроса 2
EugeneP2
@EugeneP2
Java Dev
для начала
public class JUnitTest {
  @BeforeClass public static void beforeClass() {}
  @Before public void before() {}
  @Test public void test1() { }
  @Test public void test2() { }
  @Test public void test3() { }
  @AfterClass public static void afterClass() { }
  @After public void after() { }
}

// Последовательность вызовов методов

JUnitTest.beforeClass();
JUnitTest test1 = new JUnitTest();
test1.before();
test1.test1();
test1.after();
JUnitTest test2 = new JUnitTest();
test2.before();
test2.test2();
test2.after();
JUnitTest test3 = new JUnitTest();
test3.before();
test3.test3();
test3.after();
JUnitTest.afterClass();


т.е. под каждый метод помеченный как @Test будет вызываться из отдельно созданного класса, таким образом достигается изоляция между тестами. Потому у вас в втором тесте a == null.

если нужно, чтоб шарился объект между тестами, нужно создать его как статическое поле.

и по моему, тесты в пределах одного класса вызываются последовательно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@nick_volynkin Автор вопроса
Java-разработчик
Временно решил добавлением @Before к первому тесту. Оказывается, аннотаций @Before может быть больше одной.

Но это все-таки не дает полного ответа на вопрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы