一、springboot 2.1.6 + junit5.6.0,mock 是 springboot自带
二、pom.xml
<properties>
<junit.jupiter.version>5.6.0</junit.jupiter.version>
</properties>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
三、相关实体
@Getter
@Setter
public class ParamModel {
private String key;
private String description;
}
public interface AddrJpa extends JpaRepository<Addr,Integer> {}
public interface PerJpa extends JpaRepository<Per,Integer> {}
四、测试例子 MOCK:
@SpringBootTest
@AutoConfigureMockMvc
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Slf4j
public class TestMock {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private AddrJpa addrJpa;
@Autowired
private PerJpa perJpa;
@Test
@Order(3)
public void test() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/hello")
.contentType(MediaType.APPLICATION_JSON))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
log.info("Order(3)");
log.info(mvcResult.getResponse().getContentAsString());
}
@Test
@Order(2)
public void testGetName() throws Exception {
ParamModel model = new ParamModel();
model.setKey("name");
model.setDescription("zhangsan - lisi");
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/getName")
.contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(model)))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
log.info("Order(2)");
log.info(result.getResponse().getContentAsString());
}
@Test
@Order(1)
public void testFindById(){
Optional<Per> optional = perJpa.findById(2);
Per per = optional.orElseThrow(RuntimeException::new);
log.info("order(1)");
log.info(per.getId() + ":" + per.getName() + ":" + per.getAge());
}
@Test
public void testInsertAddr(){
Per per = new Per();
per.setName("zhanglll");
per.setAge(12);
perJpa.save(per);
Addr addr = new Addr();
addr.setAddrDetails("beijing");
addr.setPer(per);
addrJpa.save(addr);
log.info("testInsertAddr,No Order.....");
}
}
五、测试Junit5
public class DynamicTestsDemo {
private final Calculator calculator = new Calculator();
@Test
void exceptionTesting() {
Exception exception = assertThrows(ArithmeticException.class, () ->
calculator.divide(1, 0));
assertEquals("/ by zero", exception.getMessage());
}
@Test
void timeoutNotExceeded() {
// The following assertion succeeds.
assertTimeout(ofMinutes(2), () -> {
// Perform task that takes less than 2 minutes.
});
}
// This will result in a JUnitException!
@TestFactory
List<String> dynamicTestsWithInvalidReturnType() {
return Arrays.asList("Hello");
}
@TestFactory
Collection<DynamicTest> dynamicTestsFromCollection() {
return Arrays.asList(
dynamicTest("1st dynamic test", () -> assertTrue(isPalindrome("madam"))),
dynamicTest("2nd dynamic test", () -> assertEquals(4, calculator.multiply(2, 2)))
);
}
@TestFactory
Iterable<DynamicTest> dynamicTestsFromIterable() {
return Arrays.asList(
dynamicTest("3rd dynamic test", () -> assertTrue(isPalindrome("madam"))),
dynamicTest("4th dynamic test", () -> assertEquals(4, calculator.multiply(2, 2)))
);
}
}
<junit.jupiter.version>5.6.0</junit.jupiter.version>