PHPUnit:为自定义断言编写测试

标签 php unit-testing phpunit

对于 PHPUnit 测试,我们有时会编写自定义断言。今天我发现一个自定义断言并没有完全断言它应该是什么。如果我为断言本身编写一个单元测试,这个问题似乎可以避免。

我看到的唯一问题是,我不太确定如何处理为应该失败的断言编写测试,而不导致测试本身失败。换句话说,对于需要字符串“foo”的测试,我想做类似的事情:

public function testAssertFoo()
{
   $var = 'bar';
   $callable = array( $this, "assertFoo" );
   $this->assertTestFails( $callable, $var );
}

当然,没有assertTestFails断言。但是有没有一种干净的方法来做这样的事情呢?

最佳答案

假设 assertFoo 使用 PHPUnit 的内置断言,例如 assertEquals,您可以简单地捕获断言失败时抛出的 PHPUnit_Framework_ExpectationFailedException .

function testAssertFoo() {
    try {
        $this->assertFoo('bar');
        self::fail("assertFoo should fail for 'bar'");
    }
    catch (PHPUnit_Framework_ExpectationFailedException $e) { /* test passed */ }
}

function assertFoo($value) {
    self::assertEquals('foo', $value);
}

关于PHPUnit:为自定义断言编写测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412601/

相关文章:

php - 在 php 中求和以前的值

php - HTML 文件正在下载而不是在 apache 服务器 (AMPPS) 上打开

php - 模拟 security.context 在调用时被视为非对象

PHPUnit 数据库测试。固定装置没有设置?

php - mysql_fetch_array() 期望参数 1 为资源,给定字符串

php - 参数列表后缺少 )

java - 代码覆盖率导致以下问题

c# - CollectionAssert.Contains(myList, myItem) != Assert.IsTrue(myList.Contains(myItem))

javascript - 如何使用 jasmine 对 Angular 形式验证进行单元测试

symfony - PHPUnit LogicException : The request was not redirected. Symfony