phpunit测试执行的顺序是什么?

时间:2016-06-27 15:53:23

标签: php unit-testing phpunit

我正在尝试测试一个其他类传递给它的类(依赖注入),它们存储为类属性。 (设置类,例如,Factory的结果)。

所以,在psuedo代码中,这就是我正在处理的问题:

//Get settings for this user.
$settings = SettingsFactory::GetSettings();

//Create widget that uses settings
$widget = new Widget($settings);

现在,显然,如果我们重构代码并破坏SettingsFactory :: Getsettings(),Widget的构造函数将失败。但是,不一定是因为Widget出了什么问题。

所以,我想在ORDER中测试这些组件,跳过"稍后"早期测试"早期"测试失败。

考虑我当前的测试结构:

tests\vendor\Settings\SettingsTest.php
tests\vendor\Widget\WidgetTest.php

PHPUnit需要在运行WidgetTest.php之前测试SettingsTest.php(并让所有东西都通过)才有意义。

我认为我需要使用@depends,但这似乎仅限于单个类范围。

This question似乎有一个难题,但我不确定如何实施。

我如何编写(构建)这些测试?

1 个答案:

答案 0 :(得分:1)

DI的一大好处是,你可以通过注入一个行为符合你想要的模拟$settings对象来避免这样的问题。这为您提供了Widget的真正单元测试,而不必担心设置的实现细节:

$mockSettings = $this->createMock(Settings::class);
$mockSettings->method('someMethod')->willReturn('something');
$widget = new Widget($mockSettings);

// assertions here