phpunit测试中的异常测试

phpunit测试中的异常测试,phpunit,Phpunit,在我尝试测试的函数的开头,有一个检查,以查看是否设置了所需的输入。如果它们不是异常,则会引发异常: public function save(array $input) { if (!isset($input['var1']) || !isset($input['var2'])) { throw new BadRequestException('Invalid parameters for ' . $this->class . ':save'

在我尝试测试的函数的开头,有一个检查,以查看是否设置了所需的输入。如果它们不是异常,则会引发异常:

    public function save(array $input) {
        if (!isset($input['var1']) || !isset($input['var2'])) {
            throw new BadRequestException('Invalid parameters for ' . $this->class . ':save');
        } .........rest of function

我是否需要将其分离到另一个函数中以测试异常?我知道如果设置了var1而没有设置var2,以及如果设置了var2而没有设置var1,我想测试这个。我是在testSave函数中进行测试,还是应该将其分离到另一个测试函数中?如果我在同一个函数中进行测试,我该怎么做

您可以使用
@expectedException
注释断言引发特定异常

例子: 您还可以使用
@expectedExceptionCode
@expectedExceptionMessage
断言异常的代码和消息


阅读手册中的更多内容:

这难道不只是测试异常吗?保存功能会继续测试吗?啊,好的,我想我明白你的意思了。使用正确的输入测试save函数,然后测试异常是否会以这种方式抛出。非常感谢。
/**
 * @test
 * @dataProvider dataInvalidInput
 * @expectedException BadRequestException
 */
public function saveShouldThrowException($invalidInput)
{
    $this->subject->save($invalidInput);
}
public static function dataInvalidInput()
{
    return array(
        'var1_missing' => array('var2' => 1),
        'var2_missing' => array('var1' => 1),
        'both_missing' => array('var3' => 1),
    );
}