I'm testing a simple factory class with a single method which returns a 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']
);
}
}
I can test the method…
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);
}
If I change the order of the parameters in new TagModel…
the test will still pass.
If I prophesize the TagModel
…
$tagModel = $this->prophesize(TagModel::class);
$tagModel->willBeConstructedWith(
[
$tagData['t_id'],
$tagData['t_promotion_id'],
$tagData['t_type_id'],
$tagData['t_value']
]
);
… but what should I then be asserting? assertSame
doesn't work because they aren't.
I could test the order with the getters from the TagModel
but then I've gone beyond testing just this unit. Yet I do feel that the order should be tested because if I change them the test still passes.