gpt4 book ai didi

java - 如何使用 jmockit 从模拟类调用真实方法

转载 作者:行者123 更新时间:2023-11-30 06:46:03 24 4
gpt4 key购买 nike

假设我有一个使用 jmockit 模拟的类 MockLoginHelper。我想更改方法 getSDKConfig 之一的行为。在这个方法中,我想调用原始的LoginHelper.relogin。我的 Eclipse 认为下面的 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;
}
}

最佳答案

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;
}
}

关于java - 如何使用 jmockit 从模拟类调用真实方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43667714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com