我使用一个返回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来测试订单,但之后我已经超越了测试此单元的范围。但我觉得应该测试顺序,因为如果我改变它们,测试仍然会通过。
答案 0 :(得分:1)
您正在测试的方法是工厂。它创建了一个对象。如果确定它的预期类型不够,则需要验证其状态。要么用getter检查它,要么创建一个你期望接收的对象,并使用assertEquals()来比较它。