Вызов конструктора тестового случая Junit в параметризованном средстве выполнения

Я написал длинный параметризованный тест, одним из параметров которого является вызов конструктора с синтаксисом двойных скобок для создания разных объектов для каждой строки 2D-массива:

Object[][] data = new Object[][] {
{ 1, 2, 3, new Blah() {{ setA(); }} }
{ 1, 2, 3, new Blah() {{ setB(); }} }
...

Поскольку философия JUnit заключается в вызове конструктора тестового примера для каждого @Test, я предполагал, что он будет делать то же самое с параметризованными тестами, но я вижу, что он вызывает только этот конструктор (конструктор, определенный для параметризованного теста) один раз в строке, а не один раз за тест в строке.

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


person orbfish    schedule 12.09.2012    source источник


Ответы (1)


Я не уверен, полностью ли я следую за вами, но когда тест запускается, происходит следующее:

  1. Метод, который вы аннотировали с помощью метода @Parameters, вызывается один раз и только один раз.
  2. Экземпляр средства выполнения теста создается для каждой строки в коллекции, возвращаемой аннотированным методом.
  3. Тест создается для каждой строки в коллекции параметров с помощью ее конструктора, но передается в соответствующей строке значения параметра, которая была кэширована при первоначальном вызове.

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

Изменить: покопавшись в коде, я лучше понимаю, о чем вы сейчас спрашиваете. Я только что отладил параметризованный тест с помощью JUnit 4.10, и он действительно вызывает конструктор один раз для каждой строки для каждого теста.

person jonathan.cone    schedule 13.09.2012
comment
Вы говорите, что поведение изменилось в 4.10, или это все еще с кешированной строкой? - person orbfish; 13.09.2012
comment
Что ж, это на самом деле не отвечает на вопрос, но спасибо за ваше время, это помогло мне придумать обходной путь. - person orbfish; 21.09.2012