在使用该特征在测试用例中声明的测试之前,执行在特征中声明的测试

时间:2017-08-04 14:20:12

标签: php symfony unit-testing phpunit traits

我有一个Symfony WebTestCase - 扩展PHP Test类和DRY-trait。我的类@depend中的测试函数在我的特征中测试函数,但是我无法在类测试之前执行特征测试。这可能吗?

trait TestTrait
{
    /**
     * @beforeClass
     */
    public function testBeforeAnythingElseHappens()
    {
        /*...*/
    }
    /* more functions */
}

测试类

class Test extends WebTestCase
{
    use TestTrait;

    /**
     * @depends testBeforeAnythingElseHappens
     */
    function testClassSpecificStuff()
    {
        /* ... */
    }
}

1 个答案:

答案 0 :(得分:0)

首先,请参阅PHPUnit Manual - Appendix B. Annotations

  

@beforeClass

     

@beforeClass注释可用于指定在运行测试类中的任何测试方法以设置共享夹具之前应调用的静态方法。

所以,你不应该在这里使用@beforeClass - 它旨在允许设置灯具。此外,注释为的方法应为static

其次,请参阅PHPUnit Manual - Appendix B. Annotations

  

@depends

     

PHPUnit支持在测试方法之间声明显式依赖关系。此类依赖项不定义测试方法的执行顺序,但它们允许生产者返回测试夹具的实例并将其传递给依赖的使用者。

所以是的,您可以使用@depends注释来声明测试之间的依赖关系。只需删除@beforeClass注释:

即可
trait TestTrait
{
    public function testBeforeAnythingElseHappens()
    {
    }
}

class Test extends WebTestCase
{
    use TestTrait;

    /**
     * @depends testBeforeAnythingElseHappens
     */
    public function testClassSpecificStuff()
    {
    }
}

第三,几句建议(根据我自己的经验):

  • 不要求测试按特定顺序运行。
  • 如果你在一次测试中安排一些事情并且在另一次测试中需要相同的东西,那么就多做一次,不要过于担心重复自己。

供参考,见:

相关问题