springboot+mock+junit5搭建测试环境

一、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)))

        );

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建Java应用程序的开源框架,它提供了一种简化了配置的方式来快速构建应用程序。JUnit是一个用于编写和运行单元测试的开源测试框架,而Mockito是一个用于创建和管理模拟对象的Java库。 下面是一个使用Spring Boot、JUnit和Mockito进行单元测试的示例: 假设我们有一个UserService类,它依赖于一个UserRepository接口来访问数据库并进行一些操作。我们想要对UserService的方法进行单元测试。 首先,我们需要创建一个测试类,命名为UserServiceTest。在测试类中,我们将使用JUnit的注解来标记测试方法,并使用Mockito来创建模拟对象。示例代码如下: ```java @RunWith(MockitoJUnitRunner.class) public class UserServiceTest { @InjectMocks private UserService userService; @Mock private UserRepository userRepository; @Test public void testGetUserById() { // 配置模拟对象的行为 User user = new User("1", "John"); when(userRepository.findById("1")).thenReturn(user); // 调用被测试的方法 User result = userService.getUserById("1"); // 验证结果 assertEquals("John", result.getName()); } } ``` 在上面的示例中,我们使用了@RunWith注解来指定使用MockitoJUnitRunner运行测试,这样就能自动创建和管理模拟对象。使用@InjectMocks注解将被测试的对象自动注入到测试类中,使用@Mock注解创建模拟对象。 在testGetUserById方法中,我们首先使用when方法配置userRepository模拟对象的行为,表示当传入参数为"1"时,返回一个指定的User对象。 然后,我们通过调用userService的getUserById方法来测试该方法的逻辑。最后,使用assertEquals断言来验证结果是否符合预期。 以上就是一个使用Spring Boot、JUnit和Mockito进行单元测试的示例。通过使用Mockito创建模拟对象,我们可以更容易地测试各个方法的逻辑,而不依赖于实际的数据库。这样可以提高测试效率并确保代码的质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值