phpunit 测试的执行顺序是什么?
What order are phpunit tests executed?
我正在尝试测试一个 class,它有其他 class 传递给它(依赖注入),它们存储为 class 属性。 (一个设置 class,例如它是一个工厂的结果)。
因此,在伪代码中,这就是我要处理的内容:
//Get settings for this user.
$settings = SettingsFactory::GetSettings();
//Create widget that uses settings
$widget = new Widget($settings);
现在,显然,如果我们重构代码并中断 SettingsFactory::Getsettings(),Widget 的构造函数将会失败。但是,不一定是因为 Widget 有什么问题。
所以,我想按顺序测试这些组件,在 "early" 测试失败时跳过 "later" 测试。
考虑我当前的测试结构:
tests\vendor\Settings\SettingsTest.php
tests\vendor\Widget\WidgetTest.php
PHPUnit 需要在 运行 WidgetTest.php 有意义之前测试 SettingsTest.php(并且一切都通过)。
我想我需要使用@depends,但这似乎仅限于一个class 范围。
This question 好像找到了一块拼图,但我不知道如何实现。
如何编写(构建)这些测试?
DI 的一大好处是您可以通过注入一个按您想要的方式运行的模拟 $settings
对象来避免此类问题。这给了你一个真正的 Widget 单元测试,而不用担心 Settings 的实现细节:
$mockSettings = $this->createMock(Settings::class);
$mockSettings->method('someMethod')->willReturn('something');
$widget = new Widget($mockSettings);
// assertions here
我正在尝试测试一个 class,它有其他 class 传递给它(依赖注入),它们存储为 class 属性。 (一个设置 class,例如它是一个工厂的结果)。
因此,在伪代码中,这就是我要处理的内容:
//Get settings for this user.
$settings = SettingsFactory::GetSettings();
//Create widget that uses settings
$widget = new Widget($settings);
现在,显然,如果我们重构代码并中断 SettingsFactory::Getsettings(),Widget 的构造函数将会失败。但是,不一定是因为 Widget 有什么问题。
所以,我想按顺序测试这些组件,在 "early" 测试失败时跳过 "later" 测试。
考虑我当前的测试结构:
tests\vendor\Settings\SettingsTest.php
tests\vendor\Widget\WidgetTest.php
PHPUnit 需要在 运行 WidgetTest.php 有意义之前测试 SettingsTest.php(并且一切都通过)。
我想我需要使用@depends,但这似乎仅限于一个class 范围。
This question 好像找到了一块拼图,但我不知道如何实现。
如何编写(构建)这些测试?
DI 的一大好处是您可以通过注入一个按您想要的方式运行的模拟 $settings
对象来避免此类问题。这给了你一个真正的 Widget 单元测试,而不用担心 Settings 的实现细节:
$mockSettings = $this->createMock(Settings::class);
$mockSettings->method('someMethod')->willReturn('something');
$widget = new Widget($mockSettings);
// assertions here