我有一个Spring测试用例,但我需要使用servlet上下文的模拟
@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");
}
}
但是,由于测试失败,因此在自动装配(我认为)之后会调用设置模拟程序。
有其他地方可以做这种事情吗?
我最近要做的解决方法
@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
做更多的样板代码。