2016-06-10 75 views
0

它能夠測試兩次輸出嗎?
這是代碼測試輸出兩次

<?php 
public function testAutoTriggerOff() 
{ 
    $user = array(
     'id'=>1, 
     'name'=>'Andy', 
     'logTime'=> time() 
     ); 
    $this->elevent->turnOffAutoTrigger(); 
    $this->elevent->attach('Elevent\Test\Event\UserHasLoggedIn', new WelcomeUser); 
    $event = $this->elevent->setEvent('Elevent\Test\Event\UserHasLoggedIn', $user); 
    $this->expectOutputString(''); 
    $this->elevent->trigger($event); 
    $this->expectOutputString('Welcome, Andy'); 
} 

因此,SetEvent的調用後,我想測試沒有輸出..
而且,觸發調用後,我想測試輸出'歡迎,安迪'
該測試通過。
但是,如果我改變了第一次測試輸出到的東西,應該是假的,比如

$this->expectOutputString('this one should be false'); 
    $this->elevent->trigger($event); 
    $this->expectOutputString('Welcome, Andy'); 

但是,測試也通過了。我預料它會失敗,因爲我想兩次測試輸出。
在觸發之前,它不應該輸出。
觸發後,輸出應該是'Welcome,Andy'
如何測試這種方式?

+0

你真的在測試兩種不同的東西,所以你應該把它分成兩個單獨的單元測試。 – jeroen

+0

@jeroen不,我不測試不同的事情..我測試自動觸發器是否真的關閉..如果自動觸發器關閉,我需要調用觸發器方法來觸發偵聽器。如果它啓動,我不需要調用觸發器,因爲事件已設置,所以它是自動觸發的。請幫助 –

回答

0

您的問題是expectOutputString評估測試過程中回顯的內容。所以如果你兩次調用它,你會用第二個期望覆蓋第一個期望。

如果你仔細想想,輸出是唯一的,你不能有一個單獨的測試有2個不同的輸出。

所以@ jeroen的評論是正確的。在觸發事件之前需要進行測試以檢查輸出是否爲空,而在觸發事件之後需要另一個用於檢查輸出。

看起來你的班級直接回應內容。這將使其不易測試。如果您使用MVC模式,則通常只有一個echo用於將響應內容發送到瀏覽器。

+0

不回顯內容,但觸發偵聽器。偵聽器中的「回顯」僅用於測試。 –