Phpunit 测试输出是否不包含文本
我知道如何使用PHPUnit库测试php输出,使用Phpunit 测试输出是否不包含文本,phpunit,Phpunit,我知道如何使用PHPUnit库测试php输出,使用expectOutputString()或expectOutputString()。现在我需要确保输出不包含给定的字符串。我可以使用输出缓冲和搜索内部字符串来实现这一点,但更好的方法可能是使用带有适当表达式的expectOutputString() 该如何构建此表达式?您想要使用正则表达式,而要进行负匹配,必须使用先行断言语法。例如,要测试输出是否不包含“hello”: 给出此输出: $ phpunit testOutputRegex.php
expectOutputString()
或expectOutputString()
。现在我需要确保输出不包含给定的字符串。我可以使用输出缓冲和搜索内部字符串来实现这一点,但更好的方法可能是使用带有适当表达式的expectOutputString()
该如何构建此表达式?您想要使用正则表达式,而要进行负匹配,必须使用先行断言语法。例如,要测试输出是否不包含“hello”: 给出此输出:
$ 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.
这很简单。测试该字符串不包含其他字符串: 编辑 2020年,PHPUnit 9.x采用了另一种简洁的方法:
$this->assertStringNotContainsString(针、草垛);
见PHPUnit。并非所有可用的断言都记录在文档中
找到它们的好方法是从PHPUnit测试类中dd($this)
(或var\u dump($this)
)并滚动输出的方法
部分。在这里您可以看到可用的断言,包括未记录的断言
老一套的答案
更详细、更灵活地使用不同的断言,而不仅仅是字符串
$string='just some string';
$this->assertThat($string, $this->logicalNot($this->stringContains('script')));
// Assertion is passed.
基于来自
我用它来检查表单字段是否正常
在PHPUnit测试中,我建立了一个测试数组,其中有
标记,需要进行消毒。通过测试中的消毒方法。清理结果(避免与断言数组相混淆,并且在var\u dump
序列化结果时更容易看到)
然后在断言中应用上述方法并享受:)不幸的是,这似乎不适用于多行。请使用
echo“多么奇怪的世界!\n新句子”
insidetestExpectNoHello()
@koralaha,您需要在正则表达式中使用s
标志。我已经编辑了我的答案,因为这通常是您想要的。echo“what Hello a strange world!\n”
不会让我失败:(@koral你是对的。一些研究告诉我我的正则表达式错了。*
应该在括号外!我用两个测试扩展了我的答案。
$string='just some string';
$this->assertThat($string, $this->logicalNot($this->stringContains('script')));
// Assertion is passed.