【问题标题】:Can't get PHPUnit dependencies to work无法使 PHPUnit 依赖项工作
【发布时间】:2012-04-26 12:20:03
【问题描述】:

我正在开发一个 API,但在编写一些测试用例时遇到了问题。 我已经编写了一组通用测试用例来测试所有实体。其中包括创建、修改和删除等一般操作。

/**
 * @dataProvider provideCreateData
 * @depends LoginTest::testLogin
 */
public function testCreate

 /**
 * @dataProvider provideModifyData
 * @depends testCreate
 */
function testModify

数据提供者提供 API 实体列表及其各自的属性,测试会动态测试所有实体,而无需我们在未来发生变化时对测试进行主控。

上述内容目前运行良好,但我在集成其他需要的硬编码测试时遇到了麻烦,例如不遵循一般模式的搜索功能。 显然,我无法在没有现有实体的情况下测试 find 函数,因此 find 测试需要在 create 测试之后运行,而我在执行此操作时遇到了麻烦。我尝试使用:

 /**
 * @depends GeneralTest::testCreate 
 */
public function testFind() {}

这不起作用,测试没有运行,而是无缘无故地被跳过。但是,如果我删除了依赖项,测试就会运行,但是我不能再保证数据库中存在实体。

我觉得我遗漏了一些明显的东西,或者我误解了一些重要的概念。

【问题讨论】:

    标签: php unit-testing testing phpunit


    【解决方案1】:

    消费者测试会被跳过有几个原因。

    1. “testFind”在“GeneralTest::testCreate”之前定义。 PHPUnit 不会改变执行顺序来帮助依赖;那是你的。
    2. “GeneralTest::testCreate”中的断言失败。如果断言失败,则说明未满足依赖关系,因此跳过该方法。

    如果你真的需要,你应该只使用@depends。您应该努力让每个测试方法测试一个特定的执行路径。如果您认为需要该依赖项,则需要配置一个测试套件,以便您可以控制测试的顺序。

    https://phpunit.de/manual/3.7/en/organizing-tests.html#organizing-tests.xml-configuration

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2016-05-14
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      相关资源
      最近更新 更多