Я тестирую простой фабричный класс с единственным методом, который возвращает TagModel
,
class TagFactory
{
public function buildFromArray(array $tagData)
{
return new TagModel(
$tagData['t_id'],
$tagData['t_promotion_id'],
$tagData['t_type_id'],
$tagData['t_value']
);
}
}
Я могу проверить метод …
public function testbuildFromArray()
{
$tagData = [
't_id' => 1,
't_promotion_id' => 2,
't_type_id' => 3,
't_value' => 'You are valued',
];
$tagFactory = new TagFactory();
$result = $tagFactory->buildFromArray($tagData);
$this->assertInstanceOf(TagModel::class, $result);
}
Если я изменю порядок параметров в new TagModel…
тест все равно пройдет.
Если я пророчествую TagModel
…
$tagModel = $this->prophesize(TagModel::class);
$tagModel->willBeConstructedWith(
[
$tagData['t_id'],
$tagData['t_promotion_id'],
$tagData['t_type_id'],
$tagData['t_value']
]
);
… но что я тогда должен утверждать? assertSame
не работает, потому что это не так.
Я мог бы проверить заказ с получателями из TagModel
но потом я вышел за рамки тестирования только этого устройства. Тем не менее, я чувствую, что заказ должен быть проверен, потому что, если я изменю их, тест все равно пройдет.
Метод, который вы тестируете, является заводским. Это создает объект. Если вам недостаточно убедиться, что он соответствует ожидаемому типу, необходимо проверить его состояние. Либо проверьте его с помощью получателей, либо создайте объект, который вы ожидаете получить, и используйте assertEquals () для его сравнения.
Других решений пока нет …