Установка вложенных тестов для статических внутренних тестовых классов в JUnit4 - PullRequest
2 голосов
/ 17 мая 2019

Я читал о возможности создания внутренних тестовых классов с 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

1 Ответ

1 голос
/ 17 мая 2019

Удалить статические данные из вложенного класса, запустите с @RunWith(NestedRunner.class)

добавить юнит-бегунов из com.nitorcreations в pom.xml.

...