我知道如何使用expectOutputString()
或expectOutputString()
使用PHPUnit库测试php输出。现在我需要确保输出不包含给定的字符串。我可以使用输出缓冲和搜索内部字符串来完成此操作,但可能更好的方法是使用expectOutputString()
和正确的表达式。
该表达式应该如何构建?
答案 0 :(得分: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.
答案 1 :(得分: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
方法,如上所示,享受:)