JMockit官方文档:伪造Facking-part 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();
 
...
}

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

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

到目前为止,我们只伪造了public实例方法。下列方法也可以被伪造:
protected、package-private方法
static方法
final方法
native方法。
甚至,一个static方法可以被一个伪造为一个instance方法,反之亦然(保持签名一致即可)。
被伪造的方法需要有实现,但不一定是字节码(在native方法的情况下)。
所以,abstract方法不能被直接伪造。
注意:伪方法不需要是public的。

你可能感兴趣的:(JMockit官方文档:伪造Facking-part 2 应用伪类)