如何测试传递给方法

时间:2016-09-22 12:58:48

标签: php phpunit prophecy

我使用一个返回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中的getter来测试订单,但之后我已经超越了测试此单元的范围。但我觉得应该测试顺序,因为如果我改变它们,测试仍然会通过。

1 个答案:

答案 0 :(得分:1)

您正在测试的方法是工厂。它创建了一个对象。如果确定它的预期类型不够,则需要验证其状态。要么用getter检查它,要么创建一个你期望接收的对象,并使用assertEquals()来比较它。