我想在下面的方法上运行一些单元测试,我将一个模拟接口(vehicleObject)传递给ProcessVehicles,但是一旦它被传递,它就会被确定车辆类型重新分配,所以我的模拟对象没有用。我的第一个想法是创建一个布尔值来确定是否 应该运行DetermineVehicleType并将其添加为参数,但这听起来很混乱。有没有更好的方法来解决这个问题?
注入 Mock 对象的方法:
public void ProcessVehicles(ICarObject CarObject)
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
原始代码:
public void ProcessVehicles()
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
注意:我无法在调用DetermineVehicleType之前检查vehicleObject 是否为null,因为在实际使用该类时它可能不为null。从长远来看,也许完全重构是答案,在这一点上,这不是我正在寻找的答案,也许没有其他选择。
方法确定车辆类型是私有的
注意:我知道有代码异味,这是当前有效的遗留代码。我想围绕它进行测试而不是改变它,所以它看起来很漂亮,然后在生产中中断。完全重构可能是我只想确保模拟工具没有其他解决方案的唯一选择。