У меня есть класс Carpenter
, который выполняет свою работу, используя объект Lathe
и Wood
.
class Carpenter
{
function Work()
{
$tool = new Lathe();
$material = new Wood();
$tool->Apply($material);
}
}
Lathe
зависит от интерфейса, называемого Material
, поэтому я могу легко выполнить юнит-тест Lathe
, выдав ему фальшивый Material
в моем юнит-тесте. 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
, поскольку он должен создавать их экземпляры. Это означает, что в текущем состоянии я не могу выполнить модульное тестирование метода Work()
без непреднамеренного тестирования Lathe
и Wood
.
Как мне поменять свой дизайн на юнит-тест Carpenter
?