如何重用 PHPUnit 函数

How to reuse PHPUnit functions

我想通过调用它们而不是在所有单元测试中重复它们来重用我的一些 PHPUnit 函数,例如:

public function testContent()
    {
        $this->assertNotEmpty($this->response, $this->message);
    }

如果我将它放在 tests/TestCase.php 下,它会运行所有单元测试。

放在哪里比较合适,或者通常是怎么做的?顺便说一句,我在 Laravel 4.

上使用它

根据to this manual

做出自己的断言

制作类似

的东西
namespace Vendor\Library\Tests;

abstract class BaseTestCase extends \PHPUnit_Framework_TestCase
{
   public function assertContentNotEmpty($response) {
       $this->assertNotEmpty($response);
   }
}

然后用您的测试扩展此 class。 如果由于某些原因这种方法不方便,您可以将断言作为单独的 class。

显然,您的问题不是要重新使用测试,而是您的测试在不期望的时候被调用。

因此,请记住:现有 class 中名称以 "test" (testFoo, testBar) 开头的任何方法都将被视为测试。

所以如果你有 class像这样的 A、B 和 C

class A extends \PHPUnit_Framework_TestCase {
   public function testFoo() {...}
   public function testBar() {...}
}

class B extends A {
   public function testBaz() {...}
}

class C extends A {
   public function testQuz() {...}
}

您将进行 8 次测试:A::testFoo()、A::testBar()、B::testFoo()、B::testBar()、B::testBaz() , C::testFoo(), C::testBar(), C::testQuz().

这可能不是您想要制作的。 您可能只想在 classes B 和 C 中使用 testFoo 和 testBar,而不是 A。在这种情况下,您只需将 A 声明为抽象 class.

abstract class A extends \PHPUnit_Framework_TestCase {
   public function testFoo() {...}
   public function testBar() {...}
}

class B extends A {
   public function testBaz() {...}
}

class C extends A {
   public function testQuz() {...}
}

现在您有 6 个测试:B::testFoo()、B::testBar()、B::testBaz()、C::testFoo()、C::testBar() , C::testQuz().

也许,这就是您所需要的,也许不是。也许,您只想在 一些 继承 class 中使用 testFoo() 和 testBar() ,而不是全部

在这种情况下,在您的父级中进行断言 class 而不是测试。

abstract class A extends \PHPUnit_Framework_TestCase {
   public function assertFoo() { ... }
   public function assertBar() { ... }
}

class B extends A {
   public function testFoo() { $this->assertFoo(); ...}

   public function testBaz() {...}
}

class C extends A {
   public function testBar() { $this->assertBar(); ...}

   public function testQuz() {...}
}

现在,您只有 4 个测试:B::testFoo()、B::testBaz、C::testBar()、C::testQuz()