【发布时间】:2017-09-29 14:24:28
【问题描述】:
我使用 ShipFactory 创建船舶对象,但我的船舶依赖于我的 Acclerometer 类(只是 android 加速度计的包装器)。所以我有我的工厂,当它建造一艘船时,将加速度计传递给船舶构造器。
这是我的 ShipFactory:
public class ShipFactory {
private int screenX;
private int screenY;
private Context context;
private Bitmap bitmap;
// How can I mock this from in my factory?
private Accelerometer accel;
private Ship ship;
public ShipFactory(Context context){
this.context = context;
accel = new Accelerometer(context);
}
public Ship makeShip(String shipType){
bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.myship)
ship = new Ship(context,screenX,screenY,bitmap,accel);
return ship;
}
}
所以我造了这样一艘船:
ShipFactory shipFactory = new ShipFactory(context);
ship = shipFactory.makeShip("enemy");
但是现在假设我想统一我的船类并且我想模拟这些依赖项。上下文很容易模拟,因为我可以将模拟上下文传递给我的工厂,但我的工厂仍然依赖于加速度计。
对于单元测试,我应该创建一个仅用于测试的新工厂吗?或者使用工厂是否有好处,在我的单元测试中我可以一起放弃工厂并通过将我的模拟传递给船舶构造函数来直接创建新船。
【问题讨论】:
-
澄清一下:你要单元测试
Ship还是ShipFactory?
标签: java android unit-testing dependency-injection factory