Пересмешивание зависимостей Autowired в тестах Spring - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь смоделировать зависимость в моих тестах.Ниже показано, как выглядят мои классы.

class A {
  @Autowired B b;
  @Autowired C c;

  public String doA() {

    return b.doB() + c.doC();
  }
}

class C {
  @Autowired D d;

  public String doC() {

    return d.doD();
  }
}

class D {

   public String doD() {

      return "Hello";
   }
}

Я пытаюсь смоделировать метод doD () в классе D при вызове метода doA ();Однако я не хочу издеваться над методом doB () в классе B. Ниже приведен мой тестовый пример.

@RunWith(SpringRunner.class)
@SpringBootTest(
  classes = MyTestApplication.class,
  webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
public class ATest {

  @Autowired
  private A a;

  @InjectMocks
  @Spy
  private C c;

  @Mock
  private D d;

  @Before
  public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
  }

  @Test
  public void testDoA() {

    doReturn("Ola")
      .when(d)
      .doD();

    a.doA();
  }
}

В результате все равно возвращается «Привет» вместо «Ола».Я попробовал @InjectMocks на A также в тестовом классе.Но это просто приводит к тому, что зависимость B с автопроводкой B становится нулевой.Что-то не хватает в моей настройке или это неправильный путь?

Спасибо.

1 Ответ

1 голос
/ 13 марта 2019

Используйте @MockBean, так как это вставит фиктивный бин в контекст приложения перед выполнением метода теста docs .

Аннотация, которая может использоваться для добавления mock кSpring ApplicationContext.Может использоваться как аннотация уровня класса или для полей в классах @Configuration или в тестовых классах, которые являются @RunWith SpringRunner.

@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

  public class ATest {

  @Autowired
  private A a;

  @MockBean
  private D d;

  @Test
  public void testDoA() {

   doReturn("Ola")
      .when(d)
      .doD();

    a.doA();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...