小编Rev*_*sha的帖子

使用MockMvc与SpringBootTest和使用WebMvcTest之间的区别

我是Spring Boot的新手,我正在尝试了解SpringBoot中的测试工作原理.我对以下两个代码片段之间的区别有点困惑:

代码段1:

@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerApplicationTest {
    @Autowired    
    private MockMvc mvc;

    @Test
    public void getHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("Greetings from Spring Boot!")));
    }
}
Run Code Online (Sandbox Code Playgroud)

此测试使用@WebMvcTest注释,我相信它是用于特征切片测试,并且仅测试Web应用程序的Mvc层.

代码段2:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void getHello() throws Exception {
    mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andExpect(content().string(equalTo("Greetings from Spring Boot!")));
    }
}
Run Code Online (Sandbox Code Playgroud)

此测试使用@SpringBootTest注释和MockMvc.那么这与代码片段1有何不同?这有什么不同的做法?

编辑:添加代码片段3(在Spring文档中将此作为集成测试的示例)

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerIT {

@LocalServerPort
private int port;

private URL base;

@Autowired
private TestRestTemplate template;

@Before
public void …
Run Code Online (Sandbox Code Playgroud)

spring-boot

65
推荐指数
3
解决办法
2万
查看次数

Spring Boot - 重定向到不同的控制器方法

我是Spring Boot的新手.我正在使用SpringBoot和Thymeleaf创建一个非常基本的应用程序.在控制器中我有两种方法如下:

Method1 - 此方法显示数据库中的所有数据:

  @RequestMapping("/showData")
public String showData(Model model)
{
    model.addAttribute("Data", dataRepo.findAll());
    return "show_data";
}
Run Code Online (Sandbox Code Playgroud)

Method2 - 此方法将数据添加到数据库:

@RequestMapping(value = "/addData", method = RequestMethod.POST)
public String addData(@Valid Data data, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "add_data";
    }
    model.addAttribute("data", data);
    investmentTypeRepo.save(data);

    return "add_data.html";
}
Run Code Online (Sandbox Code Playgroud)

HTML文件与这些方法相对应,即show_data.html和add_data.html.

一旦addData方法完成,我想显示数据库中的所有数据.但是,上面的代码会将代码重定向到静态add_data.html页面,并且不会显示新添加的数据.我需要以某种方式调用控制器上的showData方法,因此我需要将用户重定向到/ showData URL.这可能吗?如果是这样,怎么办呢?

提前致谢.

controller thymeleaf spring-boot

19
推荐指数
2
解决办法
4万
查看次数

用于测试的SpringBoot @IntegrationTest注释

我是SpringBoot的新手.我需要了解如何使用SpringBoot编写集成测试.我在Internet上看到了一些使用@IntegrationTest注释的示例,而其他一些使用@SpringBootTest注释的示例.

我只是想知道两者有什么区别?

哪个是在Spring启动时编写集成测试的最佳方法?

spring-boot

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

spring-boot ×3

controller ×1

thymeleaf ×1