我似乎无法在PHPUnit中找到一个断言,只是测试一个字符串是否包含在另一个字符串中的某个地方.试着这样做:
public function testRecipe() {
$plaintext = get_bread_recipe();
$this->assertStringContains('flour', $plaintext);
}
Run Code Online (Sandbox Code Playgroud)
我会用什么真正的断言而不是assertStringContains?在这种情况下,我宁愿不必担心正则表达式,因为绝对不需要它.
这很简单,必须有一些我忽略的东西,但我无法理解!有趣的是assertStringStartsWith(),有assertStringEndsWith()!
更新:我知道strpos() !== false可以使用,但我正在寻找更清洁的东西.如果我只是使用vanilla PHP函数,那么所有断言的重点是什么......
mal*_*lte 76
您总是可以在自定义断言方法中隐藏丑陋,所以基本上我会有一个继承自phpunit测试用例的BaseTestCase类,您可以使用它来拥有自己的可重用断言库(请参阅http://xunitpatterns.com/Custom) %20Assertion.html)..(在php 5.4中你也可以使用traits,imho断言库是traits实际上很有用的案例之一).我总是在我的项目中引入很多自定义断言,通常是特定于域的.是的,有些也很难看:)好吧,我猜这就是封装的用途......其中的东西...... :)
更新: 我刚刚检查过'assertContains'和'assertNotContains'实际上也对字符串和数组(以及实现'Traversable'的任何东西)进行操作:
function test_Contains()
{
$this->assertContains("test", "this is a test string" );
$this->assertNotContains("tst", "this is a test string");
}
Run Code Online (Sandbox Code Playgroud)
Sch*_*eis 72
您可以告诉我assertContains检查数组是否包含值.
想查看字符串是否包含子字符串,最简单的查询是使用assertRegexp()
$this->assertRegexp('/flour/', $plaintext);
Run Code Online (Sandbox Code Playgroud)
您只需要添加分隔符.
如果你真的想要一个assertStringContains断言,你可以扩展PHPUnit_Framework_TestCase并创建自己的断言.
UPDATE
在最新版本的PHPUnit中,assertContains将处理字符串.
Tom*_*uba 46
assertContains()自 PHPUnit 8.0 起已弃用,请参阅问题 #3425。
现在推荐具体方法(参见issue #3422):
$plaintext = 'I fell on the flour';
$this->assertStringContainsString('flour', $plaintext);
Run Code Online (Sandbox Code Playgroud)
提示:使用Rector 和 PHPUnit 8.0 set立即升级。