测试输出两次

Testing output twice

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

<?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后,我想测试一下没有输出..
而且,调用触发器后,我想测试输出是 'Welcome, Andy'
这个测试通过了。
但是,如果我将第一个测试输出更改为应该为 false 的内容,例如

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

但是,测试也通过了。我预计它会失败,因为我想测试输出两次。
在触发之前,它应该没有输出。
触发后,输出应该是'Welcome, Andy'
如何测试?

您的问题是 expectOutputString 评估测试期间回显的内容。所以如果你调用它两次,你就会用第二个覆盖第一个期望。

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

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

看起来您的 class 正在直接回应内容。这将使它的可测试性降低。如果您使用的是 MVC 模式,您通常只有一个 echo 用于将响应内容发送到浏览器。