JMockit学习之mock接口和抽象类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aitangyong/article/details/20065547

大型软件项目,往往会在设计的时候进行模块化划分,模块之间存在依赖关系。为了减少各个模块之间的耦合,通过接口进行依赖,各个模块由不同的开发组进行并行开发。如果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>


展开阅读全文

没有更多推荐了,返回首页