Я хотел бы запустить некоторые модульные тесты для метода ниже. Я передаю макет интерфейса (vehicleObject) в ProcessVehicles, но как только он передается, он переназначается DetermineVehicleType, так что мой издевательский объект бесполезен. Моя первая идея состояла в том, чтобы создать логическое значение, чтобы определить, следует ли запускать DetermineVehicleType, и добавить его в качестве параметра, но это звучит очень запутанно. Есть ли лучший способ обойти это?
Метод с вводом Mock-объекта:
public void ProcessVehicles(ICarObject CarObject)
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
Оригинальный код:
public void ProcessVehicles()
{
IObject vehicleObject = DetermineVehicleType(carObject);
vehicleObject.ProcessVehicle(carObject);
}
Примечание. Я не могу проверить, является ли VehicleObject нулевым до вызова DetermineVehicleType, потому что он может быть не нулевым, когда класс фактически используется. В конечном итоге, возможно, ответом будет тотальный рефакторинг, но на данный момент это не тот ответ, который я ищу, возможно, другого варианта нет.
метод DefineVehicleType является закрытым
Примечание. Я знаю, что есть запахи кода, это устаревший код, который в настоящее время работает. Я хочу провести тесты, а не изменить его, чтобы он выглядел красиво, а затем сломался в производстве. Тотальный рефакторинг может быть единственным вариантом, который я просто хочу убедиться, что нет другого решения с фиктивными инструментами.
I am passing a mocked interface(vehicleObject) into ProcessVehicles but as soon as it is passed it gets reassigned by DetermineVehicleType
, но на самом деле вы передаетеcarObject
вDetermineVehicleType(carObject)
, так что вы имеете в виду, что издевались надcarObject
? - person sll   schedule 22.03.2012