【问题标题】:constructor breaks phpunit tests with providers构造函数用提供者打破 phpunit 测试
【发布时间】:2014-10-15 19:21:53
【问题描述】:

这是我写的一个测试 PHPUnit 测试:

<?php
class MyTest extends PHPUnit_Framework_TestCase
{
    public function __construct()
    {
        echo "starting tests\r\n";

        parent::__construct();
    }

    public function provider()
    {
        return array(array('test'));
    }

    /**
    * @dataProvider provider
    */
    public function testProvider($var)
    {
        $this->assertEquals($var, $var);
        //exit($var);
    }
}

当我运行它时,我得到以下信息:

There was 1 error:

1) MyTest::testProvider
Missing argument 1 for MyTest::testProvider()

/home/myname/test.php:19

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.

我的问题是……为什么?我该怎么办?

在我正在编写的实际单元测试中(以上只是一个演示问题的测试)我正在测试一个具有多个不同后端引擎的类。我有一个包含一堆测试用例的抽象类和一个名为 $engine 的受保护类变量。然后我有一堆类扩展这个抽象类并在构造函数中设置 $engine 。然后在抽象方法$obj-&gt;setEngine($this-&gt;engine) 中的每个测试方法中调用以测试相关的特定引擎。但是这种方法似乎破坏了提供者的单元测试,取而代之的是我不确定我应该做什么。

有什么想法吗?

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    您应该使用静态方法 setUpBeforeClass 来创建 $engine,而不是实现构造函数。引擎必须存储在静态属性中。

    https://phpunit.de/manual/current/en/fixtures.html#fixtures.sharing-fixture

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2015-05-12
      • 1970-01-01
      • 2020-11-03
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多