使用Jmockit完成static方法的mock

传统的JMock是无法Mock静态方法的,但是Jmockit能够很好地Mock类的静态方法。

package features.jmockit.staticmock;

public class StaticTarget {

	public static int m1() {
		throw new RuntimeException();
	}

	public static String m2() {
		throw new RuntimeException();
	}

}

我们可以用基于状态和基于行为的方式,对这个类进行mock:

package features.jmockit.staticmock;

import mockit.Mock;
import mockit.MockUp;
import mockit.integration.junit4.JMockit;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(JMockit.class)
public class RunState {
	@Test
	public void t1() {
		new MockUp<StaticTarget>() {

			@Mock
			public String m2() {
				return "ATY";
			}

			@Mock
			public int m1() {
				return 100;
			}
		};

		Assert.assertEquals("ATY", StaticTarget.m2());
		Assert.assertEquals(100, StaticTarget.m1());
	}

}

package features.jmockit.staticmock;

import mockit.Deencapsulation;
import mockit.Expectations;
import mockit.integration.junit4.JMockit;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(JMockit.class)
public class RunBehaviour {

	@Test
	public void t1() {
		new Expectations(StaticTarget.class) {
			{
				Deencapsulation.invoke(StaticTarget.class, "m1");
				result = 100;

				Deencapsulation.invoke(StaticTarget.class, "m2");
				result = "ATY";
			}
		};

		Assert.assertEquals("ATY", StaticTarget.m2());

		Assert.assertEquals(100, StaticTarget.m1());
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值