Я читал о возможности создания внутренних тестовых классов с JUnit для улучшения структуры тестов здесь: Тестовые случаи во внутренних классах с JUnit
Это работает довольно хорошо и все, но теперь ястолкнулся с одной проблемой, которую я не могу решить элегантно: я хотел бы иметь некоторые общие настройки теста для всех тестов и некоторые дополнительные настройки для отдельных внутренних классов.
Моя структура выглядит примерно так:
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@RunWith(Enclosed.class)
public class CalculatorTest {
private Calculator calc; // class under test
@Mock
private Object someMockObject;
@Before
public void setUp() {
// common setup
MockitoAnnotations.initMocks(this);
calc = new Calculator();
when(someMockObject.toString()).thenReturn("my happy little mock object");
}
public static class AddTests {
@Before
public void setUp() {
// test setup specifically for this class
when(someMockObject.toString()).thenReturn("does not compile :(");
}
@Test
public void shouldAddTwoIntegers() {
int result = calc.add(2, 5);
assertEquals(7, result);
}
}
}
Моя проблема в том, что внутренние классы должны быть статическими, но я хотел бы сослаться на общую настройку из включающего класса.Это (очевидно) приведет к следующей ошибке:
Невозможно сделать статическую ссылку на нестатическое поле someMockObject
Есть ли способ вложить настройки?Или мне нужно настроить каждый класс по очереди (и, следовательно, дублировать код)?
Используемая версия Java: Java8
Используемые библиотеки: JUnit4, Mockito2.12