testng + mockito + powerMock

本文介绍了如何结合TestNG、Mockito和PowerMock进行单元测试,包括添加pom依赖,TestNG和EclEmma插件安装,TestNG注解解析,Mockito的使用方法如Stubbing,参数匹配,以及PowerMock对静态方法、私有方法等的模拟。此外,还讨论了单元测试中的一些挑战和解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单元测试

添加pom依赖

		<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>6.8</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-all</artifactId>
			<version>1.10.19 </version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-api-mockito</artifactId>
			<version>1.6.5</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-module-testng</artifactId>
			<version>1.6.5</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-core</artifactId>
			<version>1.6.5</version>
			<scope>test</scope>
		</dependency>

插件安装(IDEA自带,直接跳过)

TestNG
  1. 下载Eclipse-TestNG插件地址: http://dl.bintray.com/testng-team/testng-eclipse-release/updatesites/ 选择一个版本下载,完成后将features和plugins内容分别复制到eclipse对应目录,重启验证安装
  2. 验证安装:
    在Preference输入test,看到
    在这里插入图片描述

或者,在任意项目右键运行可以看到(debug as 也有可用于调试)
在这里插入图片描述

测试覆盖分析工具EclEmma安装
  1. Eclipse 下载地址 下载安装
  2. 验证安装,在任意项目点右键打开菜单,能找到Coverage As
    在这里插入图片描述
    或在windows->Show View –>Other窗口,java菜单下能找到Coverage
    在这里插入图片描述

Test-NG简介

TestNG是一个设计用来简化广泛的测试需求的测试框架,提供从单元测试到集成测试的支持(以下来自官网介绍)

注解

@BeforeSuite 运行suite中所有测试之前执行。
@AfterSuite 运行suite中所有测试之后执行。
@BeforeClass 运行当前类中所有测试之前执行。
@AfterClass 运行当前类中所有测试之后执行。
@BeforeTest 运行<test>标签内的所有测试之前运行。
@AfterTest 运行<test>标签内的所有测试之后运行。
@BeforeGroups 组内所有测试之前执行。
@AfterGroups 组内所有测试之后执行。
@BeforeMethod 每个测试方法之前执行。
@AfterMethod 每个测试方法之后执行。
@DataProvider 提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]都可以做为测试方法的参数。
@Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]
@Listeners 定义一个测试类的监听器。
@Parameters 介绍如何将参数传递给@Test方法。
@Test 标记一个类或方法作为测试的一部分。

Mockito详解

Mock(模拟,不真实的)测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

  • 不容易构造:如HttpServletRequest必须在Servlet容器中才能构造出来
  • 比较复杂的对象:如JDBC中的ResultSet对象
简单实例
import static org.mockito.Mockito.*;

import java.util.List;

import org.testng.Assert;
import org.testng.annotations.Test;

public class SimpleMockTest {
    
    
    @Test  
    public void testSimple(){
    
      
          
        //创建mock对象,参数可以是类,也可以是接口  
        List<String> list = mock(List.class);  
          
        //设置方法的预期返回值  
        when(list.get(0)).thenReturn("hello mock");  
      
        String result = list.get(0);  
          
        //验证方法调用(是否调用了get(0))  
        verify
首先,需要在项目的pom.xml文件中添加PowerMockTestNG的依赖: ```xml <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.0.0</version> <scope>test</scope> </dependency> ``` 然后,编写测试类: ```java import org.powermock.api.mockito.PowerMockito; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class TopicTest { private Topic topic; @BeforeMethod public void setUp() { topic = PowerMockito.spy(new Topic()); } @Test public void testGetTopic() { String expected = "Test topic"; topic.setTopic(expected); String actual = topic.getTopic(); assertEquals(actual, expected); } } ``` 在这个测试中,我们使用PowerMockito.spy()方法创建Topic类的一个Spy对象,这样我们就可以对其进行模拟。然后,我们设置topic属性并使用getTopic()方法获取它,并使用TestNG的Assert.assertEquals()方法来比较期望的和实际的值。 最后,我们可以在测试运行器中执行这个测试类,例如使用Maven Surefire插件: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <includes> <include>**/*Test.java</include> </includes> </configuration> </plugin> ``` 这样,我们就可以运行mvn test命令来执行测试。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值