phpunit TestCase中的特质

时间:2016-11-21 17:00:43

标签: php phpunit

我不理解我的代码的行为。这是一个简单的版本:

我有一个测试:

class EditVoterTest extends TestCase
{
    use ContainerAwareTrait;

    protected function setUp()
    {
        $this->getContainer();
    }

    public function testSomething()
    {
        // test lauched 4 times with a provider
    }
}

和特质:

trait ContainerAwareTrait
{
    private $container;

    public function getContainer()
    {
        if (!$this->container) {
            echo "NO CONTAINER \n";
            $this->container = true;
        }

        return $this->container;
    }
}

,结果是

PHPUnit 5.6.2 by Sebastian Bergmann and contributors.

.NO CONTAINER
.NO CONTAINER
.NO CONTAINER
.                                                                4 / 4 (100%)NO CONTAINER


Time: 241 ms, Memory: 21.00MB

为什么容器每次都“构建”?

1 个答案:

答案 0 :(得分:1)

根据文档,在每次测试之前调用setUp()。 所以这是通常的行为,与特质无关。 试试这个:

class EditVoterTest extends TestCase
{
    use ContainerAwareTrait;

    /**
    * @dataProvider getData
    */
    public function testSomething()
    {
        // test something
    }

    public function getData()
    {
        return $this->getContainer();
    }
}

当您想在数据提供者中使用其方法时,特征的真正区别就开始了。 由于数据提供程序在构造函数之前加载,因此您可能会收到该方法未知的错误。 这将失败

routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });