我有以下课程。它具有在其构造函数中连接到SAP的代码。我想要模拟一个抽象方法(子类定义实现)。
public abstract class BapiExecutor {
...
public BapiExecutor(final SapConnectionInfo connectionInfo)
throws java.lang.Exception {
if (!validConnectorData()) {
throw new IllegalArgumentException(
"Does not have valid data to connect to SAP");
}
initializeState(connectionInfo);
}
public abstract Object execute() throws Exception ;
....
}
我要测试的单位是:
我想模仿对execute()
方法的调用。
private String invokeBapiToAddAssociation(Map associationMap,
SapConnectionInfo connectionInfo) {
EidCcBapiExecutor executor = null;
String bapiExecutionResult = null;
try {
executor = new EidCcBapiExecutor(connectionInfo, associationMap);
bapiExecutionResult = (String) executor.execute();
} catch (Exception e) {
e.printStackTrace();
throw new CcGenericException(
"Exception occurred while invoking the EID-CC Association BAPI executor!",
e);
}
return bapiExecutionResult;
}
Java中支持模拟参数化构造函数的任何框架?
我只想避免在构造函数中连接到SAP。
答案 0 :(得分:3)
ClassImposteriser可以做到这一点,大多数优秀的模拟框架都可以做到。
ClassImposteriser创建模拟 没有调用的实例 模拟类的构造函数。所以 具有构造函数的类 参数或调用可覆盖的方法 可以安全地模拟对象。
答案 1 :(得分:0)
您可以简单地创建模拟类,继承抽象BapiExecutor类,并在execute()(或任何其他方法)中实现您想要的行为。您无需在此处恢复到框架。
请您详细说明阻塞点是什么?
答案 2 :(得分:0)
我希望EidCcBapiExecutor可以从BapiExecutor扩展。
public class EidCcBapiExecutor extends BapiExecutor {
...
}
您可以创建Mockup类来测试特定方法,例如:
public class EidCcBapiExecutorMockup extends EidCcBapiExecutor{
public EidCcBapiExecutorMockup (final SapConnectionInfo connectionInfo){
super(connectionInfo);
}
public Object execute() throws Exception {
// You mockup code
}
}
如果要测试构造函数,可以创建类:
public class EidCcBapiExecutorMockup extends EidCcBapiExecutor{
public EidCcBapiExecutorMockup (){
super(new SapConnectionInfo());
}
}
您在构造函数中放置的对象可以在JUnit测试的setUp方法中创建!