4
我知道如何用PHPUnit庫測試php輸出,使用expectOutputString()
或expectOutputString()
。現在我需要確保輸出不包含給定的字符串。我可以使用輸出緩衝和搜索內部字符串來做到這一點,但可能更好的方法是使用expectOutputString()
以及正確的表達式。測試輸出不包含文本
該表達式應該如何構建?
我知道如何用PHPUnit庫測試php輸出,使用expectOutputString()
或expectOutputString()
。現在我需要確保輸出不包含給定的字符串。我可以使用輸出緩衝和搜索內部字符串來做到這一點,但可能更好的方法是使用expectOutputString()
以及正確的表達式。測試輸出不包含文本
該表達式應該如何構建?
你想要使用正則表達式,並做一個否定匹配,你必須使用lookahead斷言語法。例如。測試的輸出不包含「你好」:
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.
不幸的是,這似乎不是多工作。請使用'回聲'多麼奇怪的世界!\ n新語句';'testExpectNoHello()''裏面' – koral 2013-03-18 09:05:09
@koral啊哈,你需要在正則表達式中的's'標誌。我編輯了我的答案,因爲這通常是你想要的。 – 2013-03-18 10:01:03
'echo「什麼你好一個奇怪的世界!\ n」;'不會給我失敗:( – koral 2013-03-18 10:34:52