相关疑难解决方法(0)

使用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万
查看次数

webEnvironment = RANDOM_PORT 和 webEnvironment = MOCK 的区别

我写了 spring boot 集成测试,它正在工作。这是测试配置:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureMockMvc
@Transactional
public class SomeTest {
   @Autowired
   private MockMvc mvc;

   @Test
   public void insertEventTest(){
      ...testing something...
   }

}
Run Code Online (Sandbox Code Playgroud)

我知道在设置webEnvironment = RANDOM_PORTspring 时将初始化嵌入式 Web 服务器并针对该 Web 服务器运行此测试。我在运行此测试时查看了日志,发现嵌入式TomcatWebServer已启动。初始化 Tomcat 大约需要 6 秒,但在日志的这两个部分之间,很少有其他 bean 被初始化,所以我很确定初始化 Tomcat 不是 6 秒,而是不到 6 秒。日志的一部分:

2019-10-13 16:03:20.065  INFO 8596 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 0 (http)
2019-10-13 16:03:20.098  INFO 8596 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-10-13 16:03:20.098  INFO …
Run Code Online (Sandbox Code Playgroud)

java testing spring-boot-test

10
推荐指数
1
解决办法
6809
查看次数

标签 统计

java ×1

spring-boot ×1

spring-boot-test ×1

testing ×1