《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(9)

简介: 《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(9)

《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(8) https://developer.aliyun.com/article/1232472?groupCode=java



九、 主要注解

 

PowerMock为了更好地支持SpringMVC/SpringBoot项目,提供了一系列的注解,大大地简化了测试代码。

 

1. @RunWith注解

 

@RunWith(PowerMockRunner.class)

 

指定JUnit使用PowerMock框架中的单元测试运行器。

 

2. @PrepareForTest注解

 

@PrepareForTest({ TargetClass.class })

 

当需要模拟final类、final方法或静态方法时,需要添加@PrepareForTest注解,并指定方法所在的类。如果需要指定多个类,在{}中添加多个类并用逗号隔开即可。

 

3. @Mock注解

 

@Mock注解创建了一个全部Mock的实例,所有属性和方法全被置空(0或者null)。

 

4. @Spy注解

 

@Spy注解创建了一个没有Mock的实例,所有成员方法都会按照原方法的逻辑执行,直到被Mock返回某个具体的值为止。

 

注意:@Spy注解的变量需要被初始化,否则执行时会抛出异常。

 

5. @InjectMocks注解

 

@InjectMocks注解创建一个实例,这个实例可以调用真实代码的方法,其余用@Mock或@Spy注解创建的实例将被注入到用该实例中。

 

image.png

6. @Captor注解

 

@Captor注解在字段级别创建参数捕获器。但是,在测试方法启动前,必须调用MockitoAnnotations.openMocks(this)进行初始化。


@Service
public class UserService {
    @Autowired
    private UserDAO userDAO;
    public void modifyUser(UserVO userVO) {
        UserDO userDO = new UserDO();
        BeanUtils.copyProperties(userVO, userDO);
        userDAO.modify(userDO);
    }
}
@RunWith(PowerMockRunner.class)
public class UserServiceTest {
    @Mock
    private UserDAO userDAO;
    @InjectMocks
    private UserService userService;
    @Captor
    private ArgumentCaptor<UserDO> argumentCaptor;
    @Before
    public void beforeTest() {
        MockitoAnnotations.openMocks(this);
    }
    @Test
    public void testCreateUser() {
        UserVO userVO = new UserVO();
        userVO.setId(1L);
        userVO.setName("changyi");
        userVO.setDesc("test user");
        userService.modifyUser(userVO);
        Mockito.verify(userDAO).modify(argumentCaptor.capture());
        UserDO userDO = argumentCaptor.getValue();
        Assert.assertNotNull("用户实例为空", userDO);
        Assert.assertEquals("用户标识不相等", userVO.getId(), userDO.getId());
        Assert.assertEquals("用户名称不相等", userVO.getName(), userDO.getName());
        Assert.assertEquals("用户描述不相等", userVO.getDesc(), userDO.getDesc());
    }
}


7. @PowerMockIgnore注解

 

为了解决使用PowerMock后,提示ClassLoader错误。




《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(10) https://developer.aliyun.com/article/1232470?groupCode=java


 

相关文章
|
2天前
|
搜索推荐 算法 Java
JAVA中的排序算法详解与实战
JAVA中的排序算法详解与实战
6 1
|
2天前
|
存储 Java 数据处理
Java中的循环结构语句详解与实战应用
Java中的循环结构语句详解与实战应用
7 2
|
2天前
|
Java 数据安全/隐私保护
Java中的选择结构语句详解与实战应用
Java中的选择结构语句详解与实战应用
9 2
|
2天前
|
Java
JAVA运算符详解与实战应用
JAVA运算符详解与实战应用
9 3
|
5天前
|
分布式计算 Java 测试技术
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
14 0
|
5天前
|
Java
Java中的多线程编程:从基础到实战
【5月更文挑战第29天】本文将深入探讨Java中的多线程编程,从基础概念到实际应用,为读者提供全面的指导。我们将首先介绍线程的基本概念和创建方法,然后讨论线程的生命周期、同步和通信机制。最后,我们将通过一个实际案例,展示如何在Java中实现多线程编程,以提高程序的性能和响应速度。
|
7天前
|
SQL 前端开发 Java
苍穹外卖》电商实战项目(java)知识点整理(下)
苍穹外卖》电商实战项目(java)知识点整理(下)
|
7天前
|
Java 应用服务中间件 开发工具
苍穹外卖》电商实战项目(java)知识点整理
苍穹外卖》电商实战项目(java)知识点整理
|
9天前
|
存储 Java
Java语言中的类与对象:深入解析与实战应用
Java语言中的类与对象:深入解析与实战应用
|
10天前
|
设计模式 Java 数据库连接
JAVA设计模式解析与实战
本文探讨了Java中的常见设计模式,包括单例模式、工厂模式和观察者模式。单例模式确保类只有一个实例,常用于管理资源;工厂模式通过抽象工厂接口创建对象,降低了耦合度;观察者模式实现了一对多的依赖关系,当主题状态改变时,所有观察者都会收到通知。理解并运用这些设计模式能提升代码的复用性、可扩展性和可维护性。