我正在尝试测试一个其他类传递给它的类(依赖注入),它们存储为类属性。 (设置类,例如,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似乎有一个难题,但我不确定如何实施。
我如何编写(构建)这些测试?
答案 0 :(得分:1)
DI的一大好处是,你可以通过注入一个行为符合你想要的模拟$settings
对象来避免这样的问题。这为您提供了Widget的真正单元测试,而不必担心设置的实现细节:
$mockSettings = $this->createMock(Settings::class);
$mockSettings->method('someMethod')->willReturn('something');
$widget = new Widget($mockSettings);
// assertions here