У меня есть класс 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
?