gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:42:12 28 4
gpt4 key购买 nike

我正在尝试测试一个有其他类传递给它的类(依赖注入(inject)),这些类存储为类属性。 (一个设置类,例如,它是工厂的结果)。

因此,在伪代码中,这就是我要处理的内容:

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

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

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

因此,我想按顺序测试这些组件,在“早期”测试失败时跳过“稍后”测试。

考虑我当前的测试结构:

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

PHPUnit 需要在运行 WidgetTest.php 之前测试 SettingsTest.php(并让所有内容都通过)。

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

This question似乎掌握了一 block 拼图,但我不确定如何实现。

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

最佳答案

DI 的一大好处是您可以通过注入(inject)一个按您想要的方式运行的模拟 $settings 对象来避免此类问题。这为您提供了真正的 Widget 单元测试,而无需担心 Settings 的实现细节:

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

// assertions here

关于php - phpunit 测试的执行顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058324/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com