Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phpunit 测试输出是否不包含文本_Phpunit - Fatal编程技术网

Phpunit 测试输出是否不包含文本

Phpunit 测试输出是否不包含文本,phpunit,Phpunit,我知道如何使用PHPUnit库测试php输出,使用expectOutputString()或expectOutputString()。现在我需要确保输出不包含给定的字符串。我可以使用输出缓冲和搜索内部字符串来实现这一点,但更好的方法可能是使用带有适当表达式的expectOutputString() 该如何构建此表达式?您想要使用正则表达式,而要进行负匹配,必须使用先行断言语法。例如,要测试输出是否不包含“hello”: 给出此输出: $ phpunit testOutputRegex.php

我知道如何使用PHPUnit库测试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新句子”
inside
testExpectNoHello()
@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.