测试输出不包含文本

问题描述 投票:5回答:2

我知道如何用PHPUnit库测试php输出,使用expectOutputString()expectOutputString()。现在我需要确保输出不包含给定的字符串。我可以使用输出缓冲和搜索内部字符串来做到这一点,但可能更好的方法是使用expectOutputString()与正确的表达式。

该表达式应该如何构建?

phpunit
2个回答
4
投票

您想使用正则表达式,并且要进行否定匹配,您必须使用前瞻断言语法。例如。测试输出不包含“hello”:

class OutputRegexTest extends PHPUnit_Framework_TestCase
{
    private $regex='/^((?!Hello).)*$/s';

    public function testExpectNoHelloAtFrontFails()
    {
        $this->expectOutputRegex($this->regex);
        echo "Hello World!\nAnother sentence\nAnd more!";
    }

    public function testExpectNoHelloInMiddleFails()
    {
        $this->expectOutputRegex($this->regex);
        echo "This is Hello World!\nAnother sentence\nAnd more!";
    }

    public function testExpectNoHelloAtEndFails()
    {
        $this->expectOutputRegex($this->regex);
        echo "A final Hello";
    }

    public function testExpectNoHello()
    {
        $this->expectOutputRegex($this->regex);
        echo "What a strange world!\nAnother sentence\nAnd more!";
    }
}

给出这个输出:

$ phpunit testOutputRegex.php 
PHPUnit 3.6.12 by Sebastian Bergmann.

FFF.

Time: 0 seconds, Memory: 4.25Mb

There were 3 failures:

1) OutputRegexTest::testExpectNoHelloAtFrontFails
Failed asserting that 'Hello World!
Another sentence
And more!' matches PCRE pattern "/^((?!Hello).)*$/s".


2) OutputRegexTest::testExpectNoHelloInMiddleFails
Failed asserting that 'This is Hello World!
Another sentence
And more!' matches PCRE pattern "/^((?!Hello).)*$/s".


3) OutputRegexTest::testExpectNoHelloAtEndFails
Failed asserting that 'A final Hello' matches PCRE pattern "/^((?!Hello).)*$/s".


FAILURES!
Tests: 4, Assertions: 4, Failures: 3.

0
投票

这很简单。

测试该字符串不包含其他字符串:

$string='just some string'; 
$this->assertThat($string, $this->logicalNot($this->stringContains('script')));
// Assertion is passed.

基于http://www.kreamer.org/phpunit-cookbook/1.0/assertions/use-multiple-assertions-in-one-test在同一测试中多个断言的典型例子

我用它来检查表单字段清理是否正常。

在PHPUnit测试中,我建立了一个测试数组,其中包含<script>标记以进行消毒。将其传递给测试中的消毒方法。 Serialize消毒结果(以避免搞乱断言阵列,加上我的眼睛更容易var_dump的序列化结果)。

然后在stringContains断言中应用assertThat方法,如上所示,享受:)

© www.soinside.com 2019 - 2024. All rights reserved.