Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP单元:创建要使用的公共对象_Php_Unit Testing_Phpunit - Fatal编程技术网

PHP单元:创建要使用的公共对象

PHP单元:创建要使用的公共对象,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我正在为一个类编写PHP单元测试,它会发出一些curl请求。目前,每个测试都以我的类实例初始化和登录指令开始,以注销指令结束,例如 public function testSomeMethod(){ $a = new myClass(); $a->login(); .... $a->logout(); $this->assertTrue($smth); 我想创建一个公共对象$a=new myCla

我正在为一个类编写PHP单元测试,它会发出一些curl请求。目前,每个测试都以我的类实例初始化和登录指令开始,以注销指令结束,例如

public function testSomeMethod(){
        $a = new myClass();
        $a->login();
        ....
        $a->logout();
        $this->assertTrue($smth);

我想创建一个公共对象$a=new myClass(),在所有测试之前调用login方法,在所有测试之后调用logout方法。我该怎么做?

根据PHPUnit文档,您可以使用以下钩子方法:

setUp()和tearDown()模板方法对每个测试运行一次 测试用例类的方法(以及在新实例上)

此外,setUpBeforeClass()和tearDownAfterClass()模板 在运行测试用例类的第一个测试之前调用方法 在分别运行测试用例类的最后一个测试之后

在您的情况下,您可以将登录类定义为类成员,并在
setUpBeforeClass()
方法中实例化(登录),然后在
tearDownAfterClass()中注销

编辑:示例

考虑以下类别:

此测试用例:

转储以下输出:

登录名为.test1.test2注销名为

时间:49ms,内存:6.00Mb

OK(2个测试,2个断言)

希望这有帮助

namespace Acme\DemoBundle\Service;


class MyService {


    public function login()
    {
        echo 'login called'.PHP_EOL;
    }

    public function logout()
    {
        echo 'logout called'.PHP_EOL;
    }

    public function doService($name)
    {
        echo $name.PHP_EOL;
        return $name;
    }
}
use Acme\DemoBundle\Service\MyService;

class MyServiceTest extends \PHPUnit_Framework_TestCase {

    /**
     * @var \Acme\DemoBundle\Service\MyService
     */
    protected static $client;

    public static function setUpBeforeClass()
    {
        self::$client = new MyService();
        self::$client->login();
    }

    public function testSomeMethod1()
    {
        $value = self::$client->doService("test1");
        $this->assertEquals("test1",$value);
    }

    public function testSomeMethod2()
    {
        $value = self::$client->doService("test2");
        $this->assertEquals("test2",$value);
    }

    public static function tearDownAfterClass()
    {
        self::$client->logout();
    }
}