我想在方法运行一些单元测试,下面我传递一个嘲笑接口(vehicleObject)到ProcessVehicles但只要它是通过由DetermineVehicleType它被重新分配,所以我的嘲笑对象是无使用。我的第一个想法是创建一个布尔值,以确定是否应该运行DetermineVehicleType并将其添加为参数,但听起来非常混乱。有没有更好的方法来解决这个问题?有没有更好的方法来测试这种方法?
与模仿对象方法注入:
public void ProcessVehicles(ICarObject CarObject)
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
原始代码:
public void ProcessVehicles()
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
注:我无法检查vehicleObject调用DetermineVehicleType,因为它可能不是空之前是空当班级被实际使用时。从长远来看,也许总重构是答案,在这一点上,这不是我正在寻找的答案,也许没有其他选择。
方法DetermineVehicleType是私人
注:我知道有代码异味,这是遗留代码,目前的工作。我想得到它的测试不会改变它,所以它看起来很漂亮,然后停止生产。总重构可能是我唯一想确定模拟工具没有另一个解决方案的唯一选择。
如果你模拟vehicleObject,你想测试什么?如果ProcessVehicle被调用或什么的? – 2012-03-21 19:27:18
您能否详细解释ProcessVehicles方法的目标是什么?我觉得这里的代码味道不好。通过将一个对象传递给一个函数并用一个以carObject作为参数的函数改变它的引用。 – daryal 2012-03-21 19:28:02
@WouterdeKort我想获得测试方法ProcessVehicles – 2012-03-21 19:28:49