У меня есть класс Carpenter, который работает с использованием объектов Lathe и Wood.
class Carpenter
{
function Work()
{
$tool = new Lathe();
$material = new Wood();
$tool->Apply($material);
}
}
Lathe зависит от интерфейса с именем Material, поэтому я могу легко unit test Lathe дать ему подделку Material в моем unit test. Wood не зависит от чего-либо, поэтому его также можно легко протестировать.
interface Material {
// Various methods...
}
interface Tool {
function Apply(Material $m);
}
class Wood implements Material {
// Implementations of Material methods
}
class Lathe {
function Apply(Material $m) {
// Do processing
}
}
Однако Carpenter зависит от конкретных классов Lathe и Wood, потому что он должен создавать экземпляры из них. Это означает, что, поскольку он в настоящее время стоит, я не могу unit test метод Work() без непреднамеренного тестирования Lathe и Wood.
Как мне изменить свой дизайн на unit test Carpenter?