【问题标题】:Testing one test function using another, after testing that one?在测试一个测试功能之后使用另一个测试功能?
【发布时间】:2014-10-09 07:38:19
【问题描述】:

我有一些用 PHP 编写的测试类和函数,在编写它们时我有一个关于标准的问题。

我有一个函数可以创建一个后端存储对象,将其存储在数据库中,检索它,然后断言数据库中的值与它输入的值相同。

我还有另一个修改上述后端对象的函数,但要做到这一点,它当然需要存在。让第二个函数调用第一个函数(它还返回验证正确后创建的数据)是否明智,这样我就可以自动修改测试而不用硬编码所有内容?如果没有,除了硬编码值之外,还有其他方法可以替代这种方法吗?

【问题讨论】:

    标签: php unit-testing testing phpunit php-5.5


    【解决方案1】:

    在 PHPUnit 中,您可以使用 @depends 注释使测试依赖于另一个测试。您还可以将第一个测试中的值传递给从属测试。 如果第一个测试失败,则不会执行第二个测试。并且您可以使第三个测试依赖于第二个,或者多个测试依赖于另一个(例如,要测试删除,您不需要更新即可工作,只需插入)。

     public function testCreateRegister()
     {
         $db = new Database();
         $register_id = $db->createRegister('hello');
    
         // ...
         // check that the register was inserted correctly
         // ...
    
         return $register_id;
     }
    
     /**
      * @depends testCreateRegister
      */
     public function testUpdateRegister($register_id)
     {
         $db = new Database();
         $this->assertTrue($db->updateRegister('hi');
     } 
    

    如文档中所述:

    https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.test-dependencies

    【讨论】:

    • 啊,我明白了。 testCreateRegister 是否也是testUpdateRegister 的数据提供者?即,PHPUnit 是否会按照给定的顺序自动将testCreateRegister 的返回值传递给testUpdateRegister
    • 没有。他们的工作方式不同。您只能在依赖测试之间传递一个值(尽管它可以是一个数组)。但它与 Dataproviders 不同,因为依赖测试只会执行一次。
    • 太好了,这正是我所需要的。我会接受你的回答,谢谢!
    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多