当前位置: 首页 > 知识库问答 >
问题:

MockMvc在一个简单的spring boot/Thymeleaf集成测试中抛出一个断言

程卓君
2023-03-14

我使用标准的MockMvc设置为我的spring boot/Thymeleaf应用程序创建了一个基本的集成测试。我的简单测试只是验证网站的About页面加载。当我运行测试和验证状态时,我得到一个“java.lang.AssertionError:status expected:<200>but wase:<404>”错误

我尝试了几种不同的方法来创建MockMvc对象。我的其他尝试大多将mockMvc对象留为空,但我可以验证它是否正在创建,并且正在尝试加载页面。

这是我的控制器:

    @RequestMapping(value = "/about", method = RequestMethod.GET)
    public String loadAbout(Model model) {
        LOGGER.trace("Loading about page");
        return "about";
    }

下面是我的测试类:

@Test(groups = { "sboot" })
@WebMvcTest
@WebAppConfiguration
@ImportAutoConfiguration(ThymeleafAutoConfiguration.class)
@ActiveProfiles("dev")
@ContextConfiguration(classes = { WebSecurityConfig.class, WebMvcConfig.class, DatabaseConfiguration.class })
public class UserIT extends AbstractTestNGSpringContextTests {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Test
    public void AboutPage() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();      
        mockMvc.perform(get("/about"))
                    .andExpect(status().isOk());
    }
}

这是我看到的错误消息:

10:00:32.382 [DEBUG] [TestEventLogger] Gradle suite > Gradle test > com.eshrsys.sboot.test.integration.UserIT.AboutPage FAILED
10:00:32.382 [DEBUG] [TestEventLogger]     java.lang.AssertionError: Status expected:<200> but was:<404>
10:00:32.382 [DEBUG] [TestEventLogger]         at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:55)

共有1个答案

彭胡媚
2023-03-14

我找到了一个似乎对我有效的解决方案,我认为这对我来说是足够的。我没有使用WebApplicationContext,而是切换到了独立的设置,添加了ViewResolver,现在我的简单测试通过了。

下面是我更新的测试类:

@Test(groups = { "sboot" })
@WebMvcTest
@WebAppConfiguration
@ImportAutoConfiguration(ThymeleafAutoConfiguration.class)
@ActiveProfiles("dev")
@ContextConfiguration(classes = { WebSecurityConfig.class, WebMvcConfig.class, DatabaseConfiguration.class })
public class UserIT extends AbstractTestNGSpringContextTests {

//  @Autowired
//  private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Test
    public void AboutPage() throws Exception {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/templates/");
        viewResolver.setSuffix(".html");

        mockMvc = MockMvcBuilders.standaloneSetup(new EshrsysController()).setViewResolvers(viewResolver).build();
//      this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).setViewResolvers(viewResolver).build();     

        this.mockMvc.perform(get("/about"))
                    .andExpect(status().isOk());
    }
}
 类似资料:
  • 本文向大家介绍C#中判断一个集合是否是另一个集合的子集的简单方法,包括了C#中判断一个集合是否是另一个集合的子集的简单方法的使用技巧和注意事项,需要的朋友参考一下 看到这个标题,我们首先想到的是循环遍历其中一个数组,判断数组中的每个元素是否都在另一个数组中出现了,以此来判断该数组是不是另一个数组的子集,但是这样做就太过复杂了,有没有简单一点的方法呢? 打个比方,有这样的两个集合: 现在需要判断sm

  • 我正在尝试集成测试一个ItemReader——下面是一个类: 这是我的豆子。xml: 这是我想写的测试: 我java.lang.ClassCastExctive:com.sun.proxy.$Proxy36不能在之前和之后转换为ItemReader。我错过了什么?是否还有其他需要设置的东西(例如配置xml中的任何注释或条目)?

  • Spring对MockMvc有2个设置: 独立设置 WebApplication Context安装 一般来说,MockMvc用于哪种测试?单元还是集成?或者两者兼而有之? 使用独立设置(运行在Spring应用程序上下文之外)允许您编写单元测试,而使用WebApplication Context设置您可以编写集成测试,这是对的吗?

  • 我正在尝试为我的Spring项目运行集成测试,它是一个简单的get方法,用于从DB返回给定id的字符串输出。但是在Mockmvc中,我一直在Mockmvc上得到一个NullPointerException。在我的测试范围内执行。 以下是测试: 这里是控制器-输出控制器: 完全错误是:

  • 我想为类“ImageController”创建单元测试。由于映像必须由创建的用户拥有,所以我希望在执行单元测试之前创建一个用户(使用@before)。如何创建此用户?在测试UserController本身时,我做了如下操作:

  • 本文向大家介绍怎么编写一个集成测试?相关面试题,主要包含被问及怎么编写一个集成测试?时的应答技巧和注意事项,需要的朋友参考一下 当我们使用 Spring 应用去跑一个集成测试时,我们需要一个 ApplicationContext。 为了使我们开发更简单,SpringBoot 为测试提供一个注解 – @SpringBootTest。这个注释由其 classes 属性指示的配置类创建一个 Applic