【Java】DT怎么写?

【PowerMock】
参考材料:https://www.bilibili.com/video/BV1DE411h7hx/?p=11&spm_id_from=333.880.my_history.page.click
https://www.imooc.com/article/330983

  1. pom依赖
    <!-- 引入 powermock -->
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito2</artifactId>
        <version>2.0.2</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-core</artifactId>
        <version>2.0.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>2.0.2</version>
        <scope>test</scope>
    </dependency>

  1. powermock使用
    1) mock 公有方法
@RunWith(PowerMockRunner.class)
@PrepareForTest({LearnMocktio.class})
public class LearnMocktioTest {
    @Test
    public void testAddWithPowerMockito() {
        PowerMockito.mockStatic(LearnMocktio.class);
        PowerMockito.when(LearnMocktio.add(1,2)).thenReturn(3);
        Assert.assertEquals(3,LearnMocktio.add(1,2));
    }
}

2) mock 局部变量

    @Test
    public void getUserCount() {
        try{
            UserDao userDao = mock(UserDao.class);
            whenNew(UserDao.class).withNoArguments().thenReturn(userDao); // 核心mock
            PowerMockito.when(userDao.queryUserCount()).thenReturn(10);
            UserService userService = new UserService();
            assertEquals(10, userService.getUserCount());
        }catch (Throwable e) {
            fail();
        }

    }

3) mock final方法
和共有的类似

    @Test
    public void getUserName()  {
        UserService userService = PowerMockito.spy(new UserService());
        PowerMockito.doReturn("alice").when(userService).getUserName("123");
        Assert.assertEquals("alice", userService.getUserName("123"));
    }

4) mock 静态方法

    @Test
    public void getUserCount()  throws  Exception{
        try {
            PowerMockito.mockStatic(UserDao.class); // 核心mock
            PowerMockito.when(UserDao.queryUserCount()).thenReturn(10);
            UserService userService = new UserService();
            int result = userService.getUserCount();
            assertEquals(10, result);
        } catch (Throwable e){
            fail();
        }
    }

5) mock 私有方法

    public boolean exist(String userName) {
        return checkExist(userName);

    }
    private boolean checkExist(String userName) {
        throw new UnsupportedOperationException();
    }
}

    @Test
    public void exist() throws Exception {
        UserService userService = PowerMockito.spy(new UserService());
        PowerMockito.doReturn(true).when(userService,"checkExist","123");
        Assert.assertTrue(userService.exist("123"));
    }

6) mock 构造函数

PowerMockito.whenNew(UserDao.class).withAnyArguments().thenReturn(userDao);

7)Matcher Answer 接口

8) verify

    public void saveUser(User user) {
        if (userDao.queryUserCount() > 0) {
            userDao.updateUser(user);
        } else {
            userDao.insertUser(user);
        }
    }


    @Test
    public void testSaveUser() throws Exception {
        UserDao userDao = PowerMockito.mock(UserDao.class);
        PowerMockito.whenNew(UserDao.class).withAnyArguments().thenReturn(userDao);
        PowerMockito.when(userDao.queryUserCount()).thenReturn(1);
        UserService userService = new UserService();
        User user = PowerMockito.mock(User.class);
        userService.saveUser(user);
        Mockito.verify(userDao).updateUser(user);
        Mockito.verify(userDao, Mockito.never()).insertUser(user);
    }

【 Mockito】
15. 为什么要用mock? --创建一个虚假的对象,打桩验证

  1. Mockito里的关键知识:
    (1) MockitoAnnotations.openMocks(this); --初始化
    (2)@Mock 和@Spy 两个注解: @Mock 打桩,不会真正执行; @Spy 会真正执行代码
    (3) Mockito.when().thenReturn() 等打桩方法

pom依赖:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.12.4</version>
        <scope>test</scope>
    </dependency>
</dependencies>

测试方法举例:

public class LearnMocktioTest {

    @Spy
    private LearnMocktio learnMocktio;

    @Test
    public void add() {
        MockitoAnnotations.openMocks(this);
        int add = learnMocktio.add(1, 2);
        Assert.assertEquals(3, add);

        Mockito.when(learnMocktio.add(1,2)).thenReturn(0);
        Assert.assertEquals(0,learnMocktio.add(1,2));
    }
}

=================

  1. 几个重要的注解
    在这里插入图片描述

  2. 怎么用mockito写单元测试?

package Biz;

import Client.FileIOClient;
import Req.FileRequest;
import Res.FileResponse;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

/**
 * @Author:TieJiang
 * @Date: 2021/1/19 8:44 下午
 * 人一能之,己十之,人十能之,己百之,果能此道矣,虽愚必明,虽柔必强。
 */
@RunWith(MockitoJUnitRunner.class)
public class FileIOBizTest {

    @InjectMocks
    FileIOBiz fileIOBiz;

    @Mock
    FileIOClient fileIOClient;

    @Test
    public void getFile() {
//        Mock阶段
//        构造参数
        FileRequest request = new FileRequest();
        request.setName("Title");
//        Mock Client
        when(fileIOClient.FileRead(any())).thenReturn(5);
        when(fileIOClient.FileWrite(any())).thenReturn(5);

//        Mock结果,进行校验:结果一定是根据现有逻辑能判断出来的
        FileResponse response = fileIOBiz.GetFile(request);

        Assert.assertNotNull(response);
        Assert.assertEquals(response.getValue(),"5 5");

    }
}

参考代码:https://github.com/OriKey/MockTutorials/tree/master

  1. 怎么写SpringRunner的单元测试?
@RunWith(SpringRunner.class) //14.版本之前用的是SpringJUnit4ClassRunner.class
@SpringBootTest(classes = Application.class) //1.4版本之前用的是//@SpringApplicationConfiguration(classes = Application.class)
public class SystemInfoServiceImplTest {

        @Autowired
        private ISystemInfoService systemInfoservice;

        @Test
        public void add() throws Exception {
        }

        @Test
         public void findAll() throws Exception {
         }

}

pom文件:

<!--spring-test测试=-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>1.5.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

参考:
https://blog.youkuaiyun.com/qq_43547991/article/details/119997923
https://blog.youkuaiyun.com/sliping123/article/details/83817737

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值