Php 对预期异常执行任意断言的更好解决方案?

Php 对预期异常执行任意断言的更好解决方案?,php,unit-testing,exception,phpunit,Php,Unit Testing,Exception,Phpunit,当抛出的异常处理消息或代码以外的其他信息时,对其执行任意断言非常有用 是否有比以下示例更简单、可读性更强或更“phpunit推荐方式”的方法: public function testTitleShouldNotAcceptArrayAsValue() { /* Arrange */ $schema = new sch\ObjectSchema(); /* Expect */ $this->expectException(sch\Exception::c

当抛出的异常处理消息或代码以外的其他信息时,对其执行任意断言非常有用

是否有比以下示例更简单、可读性更强或更“phpunit推荐方式”的方法:

public function testTitleShouldNotAcceptArrayAsValue()
{
    /* Arrange */
    $schema = new sch\ObjectSchema();


    /* Expect */
    $this->expectException(sch\Exception::class);


    try {
        /* Act */
        $schema->title = [];
    } catch (sch\Exception $exception) {
        /* Assert */
        $this->assertEquals('title', $exception->getProperty());
        $this->assertEquals(
            [
                'properties' => [
                    'title' => [
                        'type' => 'string'
                    ]
                ]
            ],
            $exception->getRules()
        );
        throw $exception;
    }
}

如果您正在将附加信息放入异常对象中,并且希望在测试中证明它正在被设置,那么我将像您一样使用try/catch

在我看来,
expectException()
和重新抛出
是多余的。在catch结束时,我将带着pass返回函数,在catch块失败后(使用
$this->fail('sch\Exception not should');
),因为没有按照计划捕获异常


很明显,它确实在起作用,而且在大多数情况下,清晰度比优雅更有用。

如果您正在向异常对象添加附加信息,并且希望在测试中证明它正在被设置,那么我会像您一样使用try/catch

在我看来,
expectException()
和重新抛出
是多余的。在catch结束时,我将带着pass返回函数,在catch块失败后(使用
$this->fail('sch\Exception not should');
),因为没有按照计划捕获异常

这将是完全明显的,这是做-和清晰度是更有用的,很多时候,比优雅