Хотя это не так сложно, как могла бы быть настоящая библиотека фиктивных объектов, в настоящее время я делаю внедрение зависимостей с хорошими результатами следующим образом:
class Car( Engine = AtomicEngine, Wheel = CartWheel )
{
this()
{
engine = new Engine;
...
}
Engine engine;
Wheel[4] wheels;
}
Если MockEngine не указан, по умолчанию Car использует предпочтительный AtomicEngineэто здорово, потому что это то, чего я хочу большую часть времени.Также обратите внимание, что инъекция выполняется во время компиляции без штрафа во время выполнения для возможностей насмешки, т.е. не требуется наследование.
unittest
{
auto car = new Car!(MockBrokenEngine, MockWheel );
car.start();
assert(...);
}
Давайте проверим автомобиль с таким поломанным двигателем.