无法使PHPUnit依赖项工作

时间:2012-04-26 12:20:03

标签: php unit-testing testing phpunit

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

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

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

数据提供者提供了一个API实体列表及其各自的属性,这些测试可以动态测试所有实体,而无需我们在将来发生变化时必须主要测试。

以上目前工作正常,但我无法集成其他所需的硬编码测试,例如搜索功能不遵循一般模式。 显然我不能在没有现有实体的情况下测试find函数,因此find测试需要在创建测试之后运行,我无法做到这一点。我尝试使用:

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

哪个不起作用,测试没有运行,而是没有明显的原因被跳过。但是,如果我删除依赖项,则运行测试,但是我不能再保证数据库中将存在实体。

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

1 个答案:

答案 0 :(得分:5)

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

  1. 'testFind'在'GeneralTest :: testCreate'之前定义。 PHPUnit不会改变执行顺序来帮助依赖;就在你身上。
  2. 'GeneralTest :: testCreate'中的断言失败。如果断言失败,则不满足依赖性,因此跳过该方法。
  3. 如果你真的需要,你应该只使用@depends。您应该努力让每个测试方法测试特定的执行路径。如果您认为需要这种依赖关系,则需要配置一个测试套件,以便控制测试的顺序。

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