Как проверить порядок параметров, передаваемых объекту, построенному методом

Я тестирую простой фабричный класс с единственным методом, который возвращает 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() для его сравнения.

Другие вопросы по тегам