【问题标题】:PHPUnit how to avoid "OutOfRangeException" in __construct()PHPUnit如何避免__construct()中的“OutOfRangeException”
【发布时间】:2022-06-25 03:52:08
【问题描述】:

我有一个如下所示的 PHP 单元:

class Challenge1Test extends TestCase
{
    /**
     * @dataProvider invalidConstructorValues
     */
    public function test_throws_exception_for_initial_value(int $value): void
    {
        $this->expectException(\OutOfRangeException::class);
        new ImmutableWeekDay($value);
    }
//...
}

它正在测试我的类的 __construct(),如果值超出范围,则返回 OutOfRangeException。我正在测试预计会引发该错误的数据。

/**
 * @throws \OutOfRangeException
 */
public function __construct(int $value)
{
    $this->value = $value;
}

上面给出了错误数据输入的预期错误。

我正在尝试通过测试,因此我仅在该 var 满足范围要求时才对其进行初始化

/**
 * @throws \OutOfRangeException
 */
public function __construct(int $value)
{
    $refl = new \ReflectionClass($this);

    $this->value = null;

    foreach($refl->getConstants() as $k=> $v){
        if ($v = $value){
            $this->value = $value;
        }
    }
}

但我仍然会收到错误数据的超出范围异常。我的控制器中有没有一种方法可以不修改测试以通过它?

在此处链接到我的 php 沙箱代码: https://phpsandbox.io/n/old-term-kkap-0hqmq?files=%2Fsrc%2FChallenge1%2FImmutableWeekDay.php

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    我认为它是正确的

    public function test_throws_exception_for_initial_value(int $value): void
    {
        $act = (Object) new ImmutableWeekDay($value);
        $this->assertIsObject($act);
    
    }
    
    
    public function __construct(int $value)
    {
        $this->value = null;
    
        $wynik = -1;
        $a = new \ReflectionClass($this);
        foreach ($a->getConstants() as $v){
            $wynik = $v;
        }
        if ($value >= 0 && $value <= $wynik)
            $this->value = $value;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2020-12-13
      • 2010-09-21
      • 1970-01-01
      • 2021-09-23
      • 2013-06-05
      • 2019-01-15
      相关资源
      最近更新 更多