php - 如何测试每一行都抛出相同的异常?

标签 php unit-testing phpunit

我想测试我的函数是否拒绝所有非正整数。它抛出 InvalidArgumentException。我写了一个这样的测试:

/**
 * @test
 * @expectedException InvalidArgumentException
 */
public function testXThrowsException()
{
    $this->parser->x(1.5);
    $this->parser->x('2');
    $this->parser->x(1000E-1);
    $this->parser->x(+100);
}

我的测试总是通过,因为第一个测试抛出异常。其他人没有得到适当的测试。我可以将 $this->parser->x(1); 添加到我的代码中,它仍然会通过。

我应该怎么做才能断言所有这些函数调用都会引发 InvalidArgumentException?

最佳答案

/**
 * @test
 * @expectedException InvalidArgumentException
 *
 * @dataProvider foo
 */
public function testXThrowsException($value)
{
    $this->parser->x($value);
}

/**
 * Test data
 * Returns array of arrays, each inner array is used in
 * a call_user_func_array (or similar) construction
 */
public function foo()
{
    return array(
        array(1.5),
        array('2'),
        array(1000E-1),
        array(+100)
    );
}

关于php - 如何测试每一行都抛出相同的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036128/

相关文章:

php - 向 POST 客户端返回 HTTP 200 代码?

php - 在从 MySQL 查询 Codeigniter 返回的 View 页面上突出显示搜索关键字。

c++ - 我们应该在 C++ 单元测试中测试 src 代码断言(不是异常)吗?

c# - 断言我的 C# 函数抛出与另一个函数相同的异常

php - Magento 单元测试如何模拟/加载/使用产品

php - 为什么即使我传递了错误的用户名,mysqli_connect() 也返回 true?

PHP 缓存 MySQL 结果的最佳方法?

perl - 我怎样才能将不同种类的 Perl 测试分开,这样我就不必全部运行它们了?

PHP 测试包含仅输出的文件

constructor - PHPUnit - 在 Mockery 中禁用原始构造函数