在PHPUnit中测试异常

时间:2016-08-02 10:56:02

标签: php laravel phpunit

我是单元测试的新手,现在尝试使用PHPUnit为Laravel应用程序编写一些测试用例。我做了一个基本测试,如下所示:

public function testGetPointsByApp()
{
    $this
        ->json(
            'GET',
            self::URL.'/'.$value
        )
        ->assertResponseStatus(200)
        ->seeJson([
            'status' => 'success',
        ])
        ->seeJsonStructure([
            'status',
            'message',
            'data' => []
        ]);
}

现在这个有用了。但我想知道如何测试无效输入以及对于给定参数根本没有数据的情况。我在每种情况下抛出相应的异常,它会添加特定的消息。我怎样才能测试它是否被抛出?

我不想将它包含在这个方法中,并且想要编写一些其他方法来测试API中的不同场景,如无效的UUID,没有数据等。所以每次我需要调用API url或者这个调用可以通过任何类型的设置功能完成吗?

2 个答案:

答案 0 :(得分:1)

我不知道laravel但是在PHPUNIT中你可以测试是否使用expectException函数抛出异常。例如,对于InvalidArgumentException

$this->expectException(InvalidArgumentException::class);

你也可以使用注释@expectedException,还有很多东西可以在expectExceptionCode()等异常中测试。

您可以找到更多here

答案 1 :(得分:0)

由于您没有进行单元测试(您正在进行的此类测试是验收测试),您无法自行检查异常,您将寻找错误的响应:

import os
import numpy as np
from PIL import Image
for j in range(1,160):
    im = Image.open(str(j)+'.jpg')
    data = np.array(im)
    for i in (range(205,254)):
        r1, g1, b1 = i, i, i # Original 
        r2, g2, b2 = 255, 255, 255 # Replacement

        red, green, blue = data[:,:,0], data[:,:,1], data[:,:,2]
        maskEqualValues = (red==green) & (red==blue) & (green==blue)
        maskEqualValuesVal = np.multiply(maskEqualValues,red);
        mask = (maskEqualValuesVal > 205) & (maskEqualValuesVal <= 254)

        im = Image.fromarray(data)
        im.save(os.getcwd()+'\\conv\\'+str(j)+'.jpg')

Laravel验证错误返回 422 - 无法处理的实体 HTTP代码。

您也可以针对预期的错误消息或其他内容检查响应。