在Fake類的方法中桥言,可以設(shè)置一個Invocation類對象萌踱,在該方法被調(diào)用時,JMockit會為這個對象傳值限书。這種機制的意義是Fake類可以接觸到真實類虫蝶。因此,F(xiàn)ake類的方法可以得到調(diào)用參數(shù)倦西,調(diào)用次數(shù)等信息。
@Test
public void invocation() throws Exception {
final Subject testSubject = new Subject();
new MockUp<LoginContext>() {
@Mock
void $init(Invocation invocation, String name, Subject subject)
{
assertNotNull(name);
assertSame(testSubject, subject);
// Gets the invoked instance.
LoginContext loginContext = invocation.getInvokedInstance();
// Verifies that this is the first invocation.
assertEquals(1, invocation.getInvocationCount());
}
@Mock
void login(Invocation invocation)
{
// Gets the invoked instance.
LoginContext loginContext = invocation.getInvokedInstance();
// getSubject() returns null until the subject is authenticated.
assertNull(loginContext.getSubject());
}
@Mock
void logout(Invocation invocation)
{
// Gets the invoked instance.
LoginContext loginContext = invocation.getInvokedInstance();
assertSame(testSubject, loginContext.getSubject());
}
};
LoginContext theFakedInstance = new LoginContext("test", testSubject);
theFakedInstance.login();
theFakedInstance.logout();
}