我有一个关于PHPUnit的问题,以及它如何锁定对象,以及我是否以不正确的方式测试,或者它是否仅仅是PHPUnit中的某个东西。这是我的测试代码PHPUnit锁定对象
$t = Track::create(array('name'=>'test track'));
$this->assertEquals(0, $t->student_tracks, 'Empty track should be empty');
$st = StudentTrack::create(array('track_id' => $t->id, 'completion'=>'0')); //Add item
$this->assertEquals(1, $t->student_tracks, 'There should now be something in this track');
最后一个断言失败。数据库中的所有内容看起来都正确,如果我print_r两个对象($ t和$ st),它都会显示正确的信息。寻找到这些问题后,我发现,如果我在第一个断言前添加克隆它的工作原理:
$t = Track::create(array('name'=>'test track'));
$cl = clone $t;
$this->assertEquals(0, $cl->student_tracks, 'Empty track should be empty');
$st = StudentTrack::create(array('track_id' => $t->id, 'completion'=>'0')); //Add item
$this->assertEquals(1, $t->student_tracks, 'There should now be something in this track');
所以我的问题是:
是否PHPUnit的锁定对象等以后我不能用它一个断言?
我测试错了,我应该每个测试只有一个断言?
在此先感谢。
可以在测试中有多个断言,但我认为你的问题更多的是你期望$ t对象被修改,但StudentTrack工厂方法没有通过$ t,所以它不太可能修改它。 –