微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spring – 如何使用自定义WebApplicationInitializer运行测试?

class MyWebAppInitializer extends WebApplicationInitializer {
  def onStartup(servletContext: ServletContext): Unit = {
      ...
  }
}

@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = Array(classOf[MyConfig]),
    initializers=Array(classOf[MyWebAppInitializer]))     // <<< ERROR
class MyTest {
  ...
}

抱怨:

annotation argument needs to be a constant; found: classOf[MyWebAppInitializer] 

更新:@M. Deinum指出这里只允许ApplicationContextinitializers – 所以错误一个报告错误的类型错误匹配.

那么……我怎样才能按顺序使用自己的MyWebAppInitializer并测试其中定义的功能

解决方法:

在您的上下文配置中,我没有看到您列出了上下文加载器. AnnotationConfigWebContextLoader将在您的类路径上找到WebApplicationInitializer的实例,通过添加它并删除初始化器(正如您所指出的那样,对于ApplicationContextinitializers而不是WebApplicationInitializers),那么您应该全部设置.

@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = {ConfigClass.class, AnotherConfigClass.class}, loader=AnnotationConfigWebContextLoader.class))
class MyTest {
...

这是一个有效的例子

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={WebConfiguration.class, SecurityConfig.class}, loader=AnnotationConfigWebContextLoader.class)
@ActiveProfiles("dev")
public class AppTests {
    private mockmvc mockmvc;

    @Autowired
    protected WebApplicationContext webApplicationContext;

    @Before
    public void setup() {
        mockmvc = mockmvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void simple() throws Exception {
        mockmvc.perform(mockmvcRequestBuilders.get("/"))
                .andExpect(mockmvcResultMatchers.status().isOk())
                .andExpect(mockmvcResultMatchers.view().name("index"));
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐