2016-06-10 42 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

不回显内容,但触发侦听器。侦听器中的“回显”仅用于测试。 –