我正在尝试测试我的弹簧安全表单。我的项目中有一个完整的注释配置(请看下面的内容)。现在我试图通过 SpringJUnit4ClassRunner 设置一个测试用例并检查其中的一些条件。我无法做到,因为 @ContextConfiguration 注释没有看到我的上下文配置。我使用 AbstractAnnotationConfigDispatcherServletInitializer 来配置我的项目。另请参阅下面的代码。
这是测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebInit.class)
public class test {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
@Test
public void someTest() throws Exception {
mockMvc.perform(post("/").with(csrf().asHeader()).with(user("testuser").roles("USER")));
}
}
这是配置类:
@Configuration
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class, SecurityConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
我还附上错误日志
SEVERE:允许TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@4157f54e]准备测试实例时遇到异常[securityTests.test@7fa98a66] org.springframework.beans.factory.BeanCreationException:创建名称为&#39; securityTests.test&#39;的注册自动连接依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.springframework.web.context.WebApplicationContext securityTests.test.context;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型[org.springframework.web.context.WebApplicationContext]的限定bean:期望至少有一个bean可以作为此依赖项的autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
我的所有spring依赖项在pom.xml中都有相同的版本(spring 4.2.3.RELEASE)。我不想创建.xml文件,它将为我配置上下文。我希望所有这些都在java配置中完成。我该怎么做? 提前感谢您的帮助
答案 0 :(得分:0)
添加@WebAppConfiguration
,以便WebApplicationContext
可用。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = WebInit.class)
public class test {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
@Test
public void someTest() throws Exception {
mockMvc.perform(post("/").with(csrf().asHeader()).with(user("testuser").roles("USER")));
}
}
答案 1 :(得分:0)
我实际上自己解决了我的问题。 事实证明,在我的pom.xml文件中,我依赖于spring数据2.0.1.RELEASE,它在某种程度上打断了测试的正确运行。最可能的原因是spring数据2.0.1从我添加到pom.xml的其他spring组件中提取了一些类,但是我的版本是4.2.1.RELEASE,而弹簧数据提取的那些是5.0.0.RELEASE。所以覆盖发生了。无论如何,从pom.xml删除spring数据依赖后,一切都很顺利。 谢谢你的回答