PHPUnit中的expectOutputString或expectOutputRegex

Ann*_* B. 4 testing phpunit

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

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

问题:

function test_myTest() {
    $this->expectOutputString('testxzxzxzxzxz');
    $this->expectOutputString('test');
    echo 'test';
}
Run Code Online (Sandbox Code Playgroud)

即使第一次预期失败,当我生成单元测试报告时,此测试也会通过

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

assertTrue示例:

// this test fail because the first assertTrue fails
function test_myAssert() {
  $this->assertTrue(false);
  $this->assertTrue(true);
}
Run Code Online (Sandbox Code Playgroud)

看起来这是PHPUnit中缺少的功能..

在测试输出时,任何人都有想法或替代方法来实现我想要的东西吗?

Dav*_*ess 7

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

function test_myTest() {
    $this->expectOutputString('testxzxzxzxzxz' . 'test');
    echo 'test';
}
Run Code Online (Sandbox Code Playgroud)

以上将失败,因为testxzxzxzxzxztest不等于输出test.

  • 得到了一个解决方案:我使用ob_get_contents().顺便说一句,我的输出字符串是一个json字符串.我使用json_decode(ob_get_contents(),TRUE)将其转换为数组并在数组的每个元素中使用断言. (7认同)
  • 它是ob_get_contents!寻找这个将近2个小时. (2认同)