junit 单元测试指南

摘要:本文主要介绍如何使用junit来编写单元测试,包含mock对象的方法和mock静态方法使用案例,提高开发效率。

pom.xml引入依赖包

springboot引入依赖包


   org.springframework.boot
   spring-boot-starter-test


   org.mockito
   mockito-inline
   test

普通java项目



    org.junit.jupiter
    junit-jupiter
    5.9.2
    test



    org.junit.vintage
    junit-vintage-engine
    5.9.2
    test



    org.mockito
    mockito-core
    4.11.0
    test


    org.mockito
    mockito-junit-jupiter
    4.11.0
    test


    org.mockito
    mockito-inline
    4.11.0
    test

定义的类

UserEntity

@Data
@TableName("user")
public class UserEntity {

    @TableId
    private String id;

    private String name;

    private String address;

    private Date createTime;
}

UserUtils

作为被mock的静态类

public class UserUtils {

    public static UserEntity getUser(){
        return new UserEntity();
    }

    public static boolean checkName(String name){
        UserEntity userEntity = getUser();
        return userEntity.getName().equals(name);
    }

}

UserService

mock的测试类

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    @SDS("dynamic_member")
    @Transactional(rollbackFor = Exception.class)
    public UserEntity add(UserEntity userEntity) throws Exception{
        userEntity.setId(IdWorker.getIdStr());
        userEntity.setCreateTime(new Date());
        userMapper.insert(userEntity);
        return userEntity;
    }

    public UserEntity getLoginUser(){
        return UserUtils.getUser();
    }

    public boolean checkName(String name){
        boolean result = UserUtils.checkName(name);
        System.out.println(result);
        return result;
    }
}

单元测试

UserServiceTest

@ExtendWith(MockitoExtension.class)
class UserServiceTest {

    /** mock静态类 */
    private static MockedStatic userUtils;
    /** mock被测试的类 */
    @InjectMocks
    private UserService userService;

    /** mock注入的类 */
    @Mock
    private UserMapper userMapper;

    @BeforeAll
    static void init(){
        userUtils = Mockito.mockStatic(UserUtils.class);
    }

    @Test
    void add() throws Exception {
        // mock方法中调用的其他方法
        Mockito.when(userMapper.insert(Mockito.any())).thenReturn(1);
        UserEntity result = userService.add(new UserEntity());
        assertNotNull(result.getId());
    }

    @Test
    void getLoginUser() {
        UserEntity userEntity = new UserEntity();
        userEntity.setName("zhangsan");
        // mock无参静态方法
        userUtils.when(UserUtils::getUser).thenReturn(userEntity);
        UserEntity result = userService.getLoginUser();
        assertEquals("zhangsan",result.getName());
    }

    @Test
    void checkName() {
        // mock有参数静态方法
        userUtils.when(() -> UserUtils.checkName(Mockito.anyString())).thenReturn(true);
        boolean result = userService.checkName("zhangsan");
        assertTrue(result);

        // mock有参数静态方法
        userUtils.when(() -> UserUtils.checkName(Mockito.anyString())).thenReturn(false);
        result = userService.checkName("zhangsan");
        assertFalse(result);
    }
}

 

测试结果

符合我们得预期结果

junit 单元测试指南_第1张图片

junit 单元测试指南_第2张图片

 

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

你可能感兴趣的:(程序员,程序人生,软件测试,junit,单元测试,自动化测试,职场经验,软件测试,测试工具,功能测试)