假设我使用MockLoginHelper
模拟了一个jmockit
课程。我想改变方法getSDKConfig
之一的行为。在这个方法中,我想调用原始的LoginHelper.relogin
。我的日食认为下面relogin();
未定义。那么,我如何从模拟类中调用一个真正的方法呢?
class MockLoginHelper extends MockUp<LoginHelper> {
@Tested
private SDKConfiguration config;
@Mock
public SDKConfiguration getSDKConfig() {
System.out.println("");
System.out.println("Mocked " + this.getClass().getSimpleName());
if (config == null) {
try {
relogin();
} catch (Exception e) {
System.err.println("failed to relogin");
e.printStackTrace();
}
}
return config;
}
}
答案 0 :(得分:1)
Java编译器正确地认为relogin
方法不在您的模拟类中,因为MockLoginHelper
扩展了MockUp
类,而不是LoginHelper
类。你有两个选择。如果你想实际调用LoginHelper
的实际实现,那么你需要实例化一个新实现:
class MockLoginHelper extends MockUp<LoginHelper> {
@Tested
private SDKConfiguration config;
@Mock
public SDKConfiguration getSDKConfig() {
System.out.println("");
System.out.println("Mocked " + this.getClass().getSimpleName());
if (config == null) {
try {
LoginHelper helper = new LoginHelper();
helper.relogin();
} catch (Exception e) {
System.err.println("failed to relogin");
e.printStackTrace();
}
}
return config;
}
}
否则,您可以选择执行模拟实现并调用该模拟:
class MockLoginHelper extends MockUp<LoginHelper> {
@Tested
private SDKConfiguration config;
@Mock
public void relogin() {}
@Mock
public SDKConfiguration getSDKConfig() {
System.out.println("");
System.out.println("Mocked " + this.getClass().getSimpleName());
if (config == null) {
try {
relogin();
} catch (Exception e) {
System.err.println("failed to relogin");
e.printStackTrace();
}
}
return config;
}
}