【发布时间】:2015-10-28 14:15:45
【问题描述】:
如何使用私有构造函数对父类进行子类化以便模拟它?
我已经重构了我的代码,这样当它调用第三方库时,调用是 包装,以便我可以模拟该类并创建一个假包装器。然后我理论上可以返回我想要的任何东西 使用依赖注入等测试我的生产代码。
对于一些库调用,返回一个对象实例,它本身就是一个特定的库 对象类型。在生产代码中,这随后会对该对象进行后续调用。
如下代码所示:
public class MyWrapper
{
public LibraryObject MyWrappedCall()
{
LibraryObject x = ExternalLibrary.getLibObject();
return x;
}
}
public class MyProductionCode
{
public void DoX()
{
LibraryObject lo = MyWrapper.getX();
ProductionType pt = lo.doSomething();
}
}
如何伪造方法 doSomething() ?我的第一个想法是而不是返回一个实例对象 从包装的调用中,返回一个相同类型的对象。因此可以增强 MyWrapper 代码 如下:
public class MyWrapper
{
public LibraryObject MyWrappedCall()
{
//LibraryObject x = ExternalLibrary.getLibObject();
MyMockLibraryObject mlo;
return mlo;
}
public class MyMockLibraryObject extends LibraryObject
{
public ProductionType doSomething()
{
ProductionType pt;
return pt;
}
}
}
这样做的问题是父类有一个私有构造函数,所以不能子类化。
有人对如何解决这个问题有任何建议吗?
【问题讨论】:
标签: java unit-testing design-patterns mocking refactoring