JMockit学习之mock接口和抽象类

本文介绍了如何使用JMockit在大型软件项目中模拟接口和抽象类,以解决模块间依赖问题。在接口的单元测试中,JMockit允许只关注需要mock的方法,提供默认实现,避免实现所有接口方法。同时强调了MockUp中的方法必须匹配接口签名且需添加@Mock注解,否则无法正常mock。
部署运行你感兴趣的模型镜像

大型软件项目,往往会在设计的时候进行模块化划分,模块之间存在依赖关系。为了减少各个模块之间的耦合,通过接口进行依赖,各个模块由不同的开发组进行并行开发。如果A模块需要使用B模块的接口,但是B模块由于开发进度缓慢,并没有完成对应实现类的开发。那么这个时候A进行单元测试就有困难了。如果A需要测试自己的模块功能,就需要将B的接口进行mock。下面介绍下jmockit如何mock接口的。

package code.c1;

public interface IStudentService {
	public String getName(int id);

	public int getAge(int id);
}
package code.c1;

public abstract class AbstractStudentService {
	public String getName(int id) {
		return "ATY";
	}

	public abstract int getAge(int id);
}


下面是单元测试:

package net.aty.testtools.jmockit.c1;

import mockit.Mock;
import mockit.MockUp;

import org.junit.Assert;
import org.junit.Test;

import code.c1.AbstractStudentService;
import code.c1.IStudentService;

public class Run {

	@Test
	public void t1() {
		MockUp<IStudentService> proxyStub = new MockUp<IStudentService>() {
			// 需要使用@Mock标记,否则jmockit不会处理;
			// 而且方法的签名必须与接口中方法签名一致,否则jmockit会报错
			@Mock
			public String getName(int id) {
				return "00" + id;
			}
		};

		IStudentService mockInstance = proxyStub.getMockInstance();

		Assert.assertEquals("001", mockInstance.getName(1));

		Assert.assertEquals(0, mockInstance.getAge(1));

		proxyStub.tearDown();
	}

	@Test
	public void t2() {
		MockUp<AbstractStudentService> proxyStub = new MockUp<AbstractStudentService>() {
			@Mock
			public int getAge(int id) {
				return 10 * id;
			}
		};

		AbstractStudentService mockInstance = proxyStub.getMockInstance();

		Assert.assertEquals("ATY", mockInstance.getName(1));

		Assert.assertEquals(10, mockInstance.getAge(1));

		proxyStub.tearDown();
	}

}

jmockit有如下特点:

1、如果目标接口中存在多个方法,我们只需要关注需要自己mock的方法即可,对于不需要的方法,jmockit会提法默认实现,不用我们去实现接口中的所有方法。

2、MockUp中mock的方法一定要与对应接口中方法签名一致,否则会报错java.lang.IllegalArgumentException: Matching real methods not found for the following mocks。

3、MockUp中的方法一定要加@Mock注解,否则会被jmockit忽略,不能达到mock的目的。


我使用的jmockit版本如下:

<dependency>
	<groupId>org.jmockit</groupId>
	<artifactId>jmockit</artifactId>
	<version>1.22</version>
</dependency>


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值