Как настроить @MockBean, чтобы поля @Autowired могли работать? - PullRequest
1 голос
/ 28 мая 2019

У меня есть тестовый пример Spring, но мне нужно использовать макет контекста сервлета.

@RunWith(SpringRunner.class)
@ContextConfiguration(
    classes = App.class
)
public class SpringTest {
    @MockBean
    private ServletContext servletContext;
    @Autowired
    private ConfigManager configManager;

    @Before
    public void setupMocks() {
       when(servletContext.getAttribute("foo")).thenReturn("bar");
    }
    @Test
    public void test() { 
       assert configManager.get("foo").equals("bar");
    }
}

Однако, mock установки вызывается после автопроводки (я думаю), потому что тест не пройден.

Есть ли другое место для подобных вещей?

Ближайший обходной путь, который у меня был,

@RunWith(SpringRunner.class)
@ContextConfiguration(
    classes = { App.class, SpringTest.class }
)
public class SpringTest {

    @Bean
    private ServletContext servletContext() {
        final ServletContext mock = mock(ServletContext.class);
        when(mock.getAttribute("foo")).thenReturn("bar");
        return mock;
    }

    @Autowired
    private ConfigManager configManager;

    @Test
    public void test() { 
       assert configManager.get("foo").equals("bar");
    }
}

Но мне не понравился такой подход, потому что ячтобы поместить SpringTest.class в конфигурацию контекста, и мне нужно сделать больше кода котельной плиты с @Bean.

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