2010-12-11 56 views
1

我是新来的symfony中的单元测试,我很烦人,因为我遇到了一个问题,花了我1个小时的时间来识别。其他获取查询改变的学说集合

希望你们知道为什么会发生这种情况。

所以我测试我的“搜索”的方法:

class TadalistTable extends Doctrine_Table 
{ 
    public function search($query, $user_id) 
    { 
    $q = $this->createQuery('t') 
    ->leftJoin('t.Notes n') 
    ->where('n.name LIKE ?', '%'.$query.'%') 
    ->andWhere('t.user_id = ?', $user_id); 
    return $q->execute(); 
    } 
} 

它完美罚款在我的网站,但是当我测试它像这样:

//Create two notes, one called "Test Note" and one called "Test Note2" in the same list 

//Start test : 
$searchTest = Doctrine_Core::getTable('Tadalist')->search('Test', $user->getId()); 
$searchNote2 = Doctrine_Core::getTable('Tadalist')->search('noTe2', $user->getId()); 

$t->is(count($searchTest), 1, 'Searching "Test" returned 1 list'); 
$t->is(count($searchTest[0]->Notes), 2, 'Searching "Test" returned 2 notes'); 
$t->is(count($searchNote2), 1, 'Searching "noTe2" returned 1 list'); 
$t->is(count($searchNote2[0]->Notes), 1, 'Searching "noTe2" returned 1 note'); 

第二次测试失败:

ok 20 - Searching Test returned 1 list 
not ok 21 - Searching Test returned 2 notes 
# Failed test (./test/unit/Model/TadalistTest.php at line 90) 
# got: 1 
# expected: 2 
ok 22 - Searching noTe2 returned 1 list 
ok 23 - Searching noTe2 returned 1 note 

但如果我只是改变了顺序:

//Create two notes, one called "Test Note" and one called "Test Note2" in the same list 

$searchTest = Doctrine_Core::getTable('Tadalist')->search('Test', $user->getId()); 
$t->is(count($searchTest), 1, 'Searching "Test" returned 1 list'); 
$t->is(count($searchTest[0]->Notes), 2, 'Searching "Test" returned 2 notes'); 

$searchNote2 = Doctrine_Core::getTable('Tadalist')->search('noTe2', $user->getId()); 
$t->is(count($searchNote2), 1, 'Searching "noTe2" returned 1 list'); 
$t->is(count($searchNote2[0]->Notes), 1, 'Searching "noTe2" returned 1 note'); 

它的工作原理:

ok 13 - Searching Test returned 1 list 
ok 14 - Searching Test returned 2 notes 
ok 15 - Searching noTe2 returned 1 list 
ok 16 - Searching noTe2 returned 1 note 

调试后,我看到的是,第一次查询后,该searchTest [0] - >说明包含了两个“注意”的对象我创建(名为“测试说明“和”Test Note2“),第二次之后,它只包含”Test Note“(”Test Note2“似乎已被第二个查询删除)。

所以我想知道为什么它的工作是这样的,如果他们的方式来解决它。

你们谁都知道这种奇怪的行为?

+0

非常奇怪......我想你应该进一步调试,看看究竟发生了什么变化。使用像XDebug这样的分步调试器应该很容易知道。 – greg0ire 2010-12-12 11:48:55

+0

我没有XDebug,我会试试 – Julien 2010-12-12 13:19:14

+0

您可以使用XDebug进行分步调试,使用PDT,Netbean,vim,Notepad ++和更多... – greg0ire 2010-12-12 14:23:01

回答

0

这里是我的假设:在这两个查询中你都会得到相同的Tadalist对象(由相同的主键标识)。学说可能会在两个集合中使用对同一个对象的引用。第二个查询覆盖第一个查询返回的Notes。

注意:这只是一个假设。请确认它是否真的发生。