【问题标题】:How to expects diff() method in phpunit test?如何在 phpunit 测试中期望 diff() 方法?
【发布时间】:2020-04-16 10:09:27
【问题描述】:

我是 phpunit 测试初学者。我有这样的课:

class ClassA
{
    public function tracking($date)
    {
        //... something

        $now = new \DateTime();
        $days = $date->diff($now, false)->days;
        $hours = $date->diff($now, false)->h;
        $minutes = $date->diff($now, false)->i;

        //... something
        return true;
    }
}

然后,我想对tracking() 方法进行单元测试。所以我做了一个这样的测试:

class ClassATest extends TestCase
{
    /**
     * @dataProvider trackingDataProvider()
     * @param $params
     * @param $expected
     */
    public function testTracking($params, $expected)
    {
        $classA = new ClassA();
        $result = $classA->tracking($params['data']);
        $this->assertEquals($expected, $result);
    }

    public function trackingDataProvider()
    {
        return [
            'happy-case-1' => [
                'params' => [
                    'data' => new \DateTime()
                ],
                'expected' => true
            ],
        ];
    }
}

我运行测试并出现错误:Error: Call to a member function diff() on array。 我怎么能假设 diff() 将返回指定的值来测试? 请帮忙!

【问题讨论】:

    标签: php unit-testing symfony phpunit


    【解决方案1】:

    您正在尝试将DateTime 对象与$expected 进行比较。我不知道这个变量到底是什么,因为没有类型提示。如果是 DateTime 对象,则需要从中获取正确的格式和类型。

    // Get as formatted string
    (new \DateTime)->format('Y-m-d');
    

    或

    // Get as timestamp integer
    (new \DateTime)->getTimestamp();
    

    $result 也必须这样做。 因此,作为一个解释性示例,您应该在最后使用以下值来检查它们是否相等。

    // as format
    $expected = '2020-04-16';
    $result = '2020-04-16';
    
    // as timestamp
    $expected = 1587033720;
    $result = 1587033720;
    

    此外,如果您的函数 tracking 返回一个布尔值,那么您必须执行以下操作。
    assertTrue(); 或 assertEquals(true, $result)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多