测试输出两次

时间:2016-06-10 03:44:06

标签: php unit-testing testing phpunit

能否测试输出两次?
这是代码

<?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之后,我想测试没有输出..
并且,在调用触发器之后,我想测试输出是否为“欢迎”,Andy&#39;
这个测试通过了 但是,如果我将第一个测试输出更改为应该为false的内容,例如

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

但是,测试也通过了。我预计它会失败,因为我想测试两次输出 在触发之前,它应该没有输出 触发后,输出应该是“欢迎”,Andy&#39;
如何测试?

1 个答案:

答案 0 :(得分:0)

您的问题是expectOutputString评估测试期间回显的内容。因此,如果你打两次电话,你会用第二个期限覆盖第一个期望。

如果您考虑一下,输出是唯一的,您就不能为单次测试提供2个不同的输出。

所以@ jeroen的评论是正确的。在触发事件之前,您需要进行测试以检查输出是否为空,而在事件触发后检查输出则需要另一个测试。

您的班级似乎直接回应内容。这将使它不那么可测试。如果您正在使用MVC模式,通常只有一个echo用于将响应内容发送到浏览器。