如何用SpringBoot进行测试?
一、引入依赖
我们在pom.xml文件中引入以下依赖:
<!-- spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
此外,如果你想使用Mockito和MockMvc进行测试,可以再引入以下依赖:
<!-- mockito-core -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<!-- spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>test</scope>
</dependency>
<!-- spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
这是因为MockMvc需要使用Web环境进行测试,因此需要引入spring-boot-starter-web依赖。
二、编写测试类
下面我们来编写一个测试类来测试一个Controller是否正常工作。
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloControllerTest {
private MockMvc mockMvc;
@Autowired
private HelloController helloController;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.standaloneSetup(helloController).build();
}
@Test
public void test() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/hello"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Hello World"));
}
}
我们使用了JUnit和SpringRunner来编写测试类。使用@SpringBootTest注解来创建Spring上下文环境,使得我们可以直接使用自动注入的Bean。在类中注入了一个HelloController实例,并使用MockMvc进行测试。
使用@Before注解的setUp()方法来初始化MockMvc实例,参数为一个Controller实例。这样我们就可以使用MockMvc来模拟请求了。
使用@Test注解的test()方法来编写测试代码。在该方法内,我们使用get方法模拟了一个"/hello"的请求。然后使用andExpect()方法来验证请求的返回值是否符合我们的预期。在本示例中,我们预期返回的内容为"Hello World",并且状态码为200。
三、使用Mockito进行测试
接下来,我们使用Mockito对一个Service进行测试。仍然以HelloController为例,编写如下测试代码:
@RunWith(MockitoJUnitRunner.class)
public class HelloServiceTest {
@Mock
private HelloService helloService;
@InjectMocks
private HelloController helloController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
when(helloService.sayHello()).thenReturn("Mock Hello");
String result = helloController.sayHello();
assertEquals("Mock Hello", result);
}
}
我们使用了JUnit和MockitoJUnitRunner来编写测试类。使用@Mock注解来创建Mock对象。在本示例中,我们创建了一个HelloService的Mock对象。使用@InjectMocks注解来创建一个HelloController的实例并注入Mock对象。在@Before注解的setUp()方法中,我们使用MockitoAnnotations.initMocks(this)来初始化Mockito。这个方法的作用就是遍历HelloController类,将其中所有以@Mock注解的属性替换为Mock对象。
在@Test注解的test()方法中,我们模拟了HelloService中的sayHello()方法,并将它的返回值设为"Mock Hello"。然后通过HelloController调用sayHello()方法,并将返回值与我们期望的结果进行比较,以验证测试是否通过。
这就是使用SpringBoot进行测试的完整攻略。通过这个攻略,我们已经了解了如何使用MockMvc和Mockito进行测试。可以通过这种方式来进行单元测试和集成测试,帮助我们更好地保障应用程序的正常运行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何用SpringBoot 进行测试 - Python技术站