JMockit官方文档:伪造Facking-part 2 应用伪类

本文详细介绍了如何使用JMockit的伪类功能来替代真实类的行为,适用于单元测试中对类方法的模拟,包括public、protected、package-private、static、final和native方法的伪造。同时探讨了伪类在不同测试框架中的应用方式。

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

来自

 

编译:http://jmockit.github.io/tutorial/Faking.html

2 应用伪类

一个伪类必须被应用到相应的真实类才会生效。可以在整个测试类或测试套件中,或一个测试方法中应用伪类。

测试类中,可以在任何地方应用伪类:

@BeforeClass方法

@BeforeMethod、@Before、@BeforeEach(分别对应TestNG、JUnit4、Junit5),

@Test方法

一旦伪类被应用,真实类中被伪造了的方法、构造函数的执行会自动被导向对应的伪方法。

比如为了应用上面定义的FakeLoginContext,我们只需要实例化它:

@Test

public void applyingAFakeClass() throws Exception {

new FakeLoginContext());



// Inside an application class which creates a suitable CallbackHandler:

new LoginContext("test", callbackHandler).login();



...

}

当时LoginContext的构造函数被调用,FackLoginContext中对应的$init伪方法就会被执行。同样的,当LoginContext#loing方法被调用,对应的伪方法会被执行。也就是说,在示例代码中,实际没有不会做任何事情(伪方法的实现体是空的)。FakeLoginContext 在这个测试方法中被应用之后(实例化),其对LoginContext 的伪造行为就会在这个方法中生效。

2.1 哪些类型的方法可以被伪造

到目前为止,我们只伪造了public实例方法。下列方法也可以被伪造:

protected、package-private方法

static方法

final方法

native方法。

甚至,一个static方法可以被一个伪造为一个instance方法,反之亦然(保持签名一致即可)。

被伪造的方法需要有实现,但不一定是字节码(在native方法的情况下)。

所以,abstract方法不能被直接伪造。

注意:伪方法不需要是public的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值