У меня есть тестовый пример 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
.