我不理解我的代码的行为。这是一个简单的版本:
我有一个测试:
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
为什么容器每次都“构建”?
答案 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 });