【发布时间】:2014-06-05 10:40:19
【问题描述】:
我正在尝试使用 junit 和 spring-test api 为 Spring MVC 控制器创建 JUnit 测试用例。由于我的应用程序中有很多 beandefinitions,因此我使用了 LazyInitDefaultBeanDefinitionDocumentReader 并写了一个 CustomContextLoader。
我的示例测试类是:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=com.xyz.CustomXmlContextLoader.class,
locations={"file:///D:/web-module/src/test/resources/conf/application-config-controller-test.xml"})
@WebAppConfiguration
public class LoginControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Test
public void testShowForm_forgetUserID() throws Exception {
System.out.println("webappcontext::"+wac);
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
mockMvc.perform(get("/login.form")).andExpect(status().isOk());
}
}
这里,如果我执行上面的代码,wac 不会自动装配,它会返回 null。但是如果我从@ContextConfiguration 中删除loader=com.xyz.CustomContextLoader,它就可以正常工作。
我需要同时拥有延迟加载和 MockMvc 进行测试。我错过了什么吗?有没有更好的解决方案?
【问题讨论】:
-
您的自定义加载器可能会破坏正常行为(渲染
@WebAppConfiguration无用。通常WebDelegatingSmartContextLoader用于加载类(使用@WebAppConfiguration时)您可能想看看您的自定义实现。 -
你是正确的@M。迪南。我的 CustomLoader 破坏了正常行为。我删除了它并挖掘了一些弹簧代码。我使用所有 Lazyinit 配置创建了一个“GenericWebApplicationContext”的单例实例。它奏效了。
标签: spring spring-mvc junit mockmvc