Java测试框架系列:PowerMock使用系列-3:抑制不想要的行为

本文详细介绍了如何使用PowerMock框架在Java单元测试中抑制不想要的行为,包括禁止超类构造函数、抑制自身构造函数、抑制方法、抑制静态初始化器以及抑制字段。通过具体的示例代码展示了如何实例化类而不调用构造函数,以及如何处理在测试中可能导致问题的静态初始化和方法调用。
摘要由CSDN通过智能技术生成

抑制不想要的行为

总览

  1. 在测试用例的类上使用 @RunWith(PowerMockRunner.class)注解。
  2. 在测试用例的类上结合使用@PrepareForTest(ClassWithEvilParentConstructor.class)suppress(constructor(EvilParent.class))注解,以禁止调用EvilParent类的所有构造函数。
  3. 使用Whitebox.newInstance(ClassWithEvilConstructor.class) 方法去实例化一个类而无须调用其构造函数。
  4. 使用@SuppressStaticInitializationFor("org.mycompany.ClassWithEvilStaticInitializer")注解移除类org.mycompany.ClassWithEvilStaticInitializer的静态初始化器。
  5. 在类上使用 @PrepareForTest(ClassWithEvilMethod.class) 注解结合suppress(method(ClassWithEvilMethod.class, "methodName")) 去抑制类ClassWithEvilMethod中的 "methodName" 方法。
  6. 在类上使用 @PrepareForTest(ClassWithEvilField.class) 注解结合 suppress(field(ClassWithEvilField.class, "fieldName")) 去抑制类 ClassWithEvilField 中的"fieldName" 字段。

您可以在此处找到成员修改和成员匹配器方法:

  • org.powermock.api.support.membermodification.MemberModifier
  • org.powermock.api.support.membermodification.MemberMatcher

示例

有时,您甚至希望抑制某些构造函数,方法或静态初始化程序的行为,以便对您自己的代码进行单元测试。一个典型的例子是您的类需要从某种第三方框架中的另一个类扩展而来。当第3方类在其构造函数中执行某些操作而导致您无法对自己的代码进行单元测试时,就会出现问题。例如,由于某种原因,框架可能尝试加载dll或访问网络或文件系统。让我们看一些例子。

禁止超类构造函数

作为示例,让我们看一下名为ExampleWithEvilParent的类,它非常简单:

public class ExampleWithEvilParent extends EvilParent {

	private final String message;

	public ExampleWithEvilParent(String message) {
		this.message = message;
	}

	public String getMessage() {
		return message;
	}
}

这似乎是一个易于进行单元测试的类(实际上如此简单,您可能不应该对其进行测试,但是为了演示起见,让我们继续进行测试)。但是,等等,让我们看一下EvilParent类的样子:

public class EvilParent {

	public EvilParent() {
		System.loadLibrary("evil.dll");
	}
}

该父类尝试加载一个dll文件,该文件在您对ExampleWithEvilPa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值