Как проверить порядок параметров, передаваемых объекту, построенному методом
Я тестирую простой фабричный класс с единственным методом, который возвращает 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
но потом я вышел за рамки тестирования только этого устройства. И все же я чувствую, что заказ должен быть проверен, потому что, если я изменю их, тест все равно пройдет.
1 ответ
Метод, который вы тестируете, является заводским. Это создает объект. Если вам недостаточно убедиться, что он соответствует ожидаемому типу, необходимо проверить его состояние. Либо проверьте его с помощью получателей, либо создайте объект, который вы ожидаете получить, и используйте assertEquals() для его сравнения.