Testing PHPUnit中的expectOutputString或expectOutputRegex

Testing PHPUnit中的expectOutputString或expectOutputRegex,testing,phpunit,Testing,Phpunit,嗨,我正在使用PHPUnit进行单元测试 关于使用expectOutputString/expectOutputRegex方法测试输出,我有一个问题 问题: function test_myTest() { $this->expectOutputString('testxzxzxzxzxz'); $this->expectOutputString('test'); echo 'test'; } 当我生成单元测试报告时,即使 第一个期望失败了 与assert方

嗨,我正在使用PHPUnit进行单元测试

关于使用expectOutputString/expectOutputRegex方法测试输出,我有一个问题

问题:

function test_myTest() {
    $this->expectOutputString('testxzxzxzxzxz');
    $this->expectOutputString('test');
    echo 'test';
}
当我生成单元测试报告时,即使 第一个期望失败了

与assert方法不同,如果有一个断言失败,则测试将失败

示例assertTrue:

// this test fail because the first assertTrue fails
function test_myAssert() {
  $this->assertTrue(false);
  $this->assertTrue(true);
}
看起来这是PHPUnit中缺少的功能


在测试输出时,有人有想法或其他方法来实现我想要的吗?

expectOutputString
存储给定字符串以与整个测试的输出进行比较,但它会覆盖以前存储的任何字符串。换句话说,只有最后一次调用
expectOutputString
才有效。您必须构建完整的输出字符串并只调用一次
expectOutputString

function test_myTest() {
    $this->expectOutputString('testxzxzxzxzxz' . 'test');
    echo 'test';
}

上述操作将失败,因为
testxzxzxzxzztest
不等于输出
test

得到一个解决方案:我使用ob_get_contents()。顺便说一下,我的输出字符串是json字符串。我使用json_decode(ob_get_contents(),TRUE)将其转换为数组,并在数组的每个元素中使用断言。但是,简单的测试可以使用
expectOutputString
。ob\u get\u内容就是这样!搜索这个差不多2个小时。