2010-12-11 32 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。

注意:這只是一個假設。請確認它是否真的發生。