如何重用PHPUnit函数

时间:2016-09-13 05:56:13

标签: laravel-4 phpunit

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

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

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

在哪里放置这个或者通常如何做到这一点?顺便说一句,我在Laravel 4上使用它。

2 个答案:

答案 0 :(得分:0)

根据to this manual

制作自己的断言

制作类似

的内容
subversion

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

答案 1 :(得分:0)

显然,你的问题不是重复使用测试,而是在没有预期的情况下调用你的测试。

所以,请记住:任何名称以&#34开头的方法;测试"现有类中的(testFoo,testBar)将被视为测试。

所以如果你有像这样的A,B和C类

Result = ['a','d']

你将有8个测试:A :: testFoo(),A :: testBar(),B :: testFoo(),B :: testBar(),B :: testBaz(),C :: testFoo() ,C :: testBar(),C :: testQuz()。

这可能不是你想要做的。 你可能想要只在类B和C中使用testFoo和testBar,而不是它A.在这种情况下,你只需要将A声明为抽象类。

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()

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

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

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() {...}
}

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