gpt4 book ai didi

php - 我可以创建一个客户端并将其重复用于我的所有功能测试吗?

转载 作者:行者123 更新时间:2023-11-28 20:22:56 24 4
gpt4 key购买 nike

tl;dr:这是否会阻止我的测试正常工作?

我正在尝试为我的 Symfony 项目编写功能测试,并使用 The Symfony Book 中的示例.到目前为止,测试类的每个方法都以同一行代码开始:

namespace Tests\AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class SomeControllerTest extends WebTestCase
{
public function testSomethingOnRouteX()
{
$client = static::createClient();
// set up and assert
}

public function testSomethingElseOnRouteX()
{
$client = static::createClient();
// different set up and assert
}
}

我想删除这些冗余代码,但我不确定是否应该这样做。

我在创建客户端的地方添加了一个构造函数。

public function __construct()
{
parent::__construct();
$this->client = static::createClient();
}

然后在各种测试方法中我可以只使用$this->client而不需要重复创建它。到目前为止这似乎有效(我还没有很多测试。)但我对这个框架和一般的这种类型的测试还不够熟悉,所以我不确定它是否会在未来引起问题。

最佳答案

推荐的方法是使用 setUp() 方法,或 @before Hook 。两者都在每个测试方法之前调用,因此您是安全的,因为状态不会在测试用例之间共享。每个测试用例运行后也会自动为您完成清理(在 WebTestCase 类中实现)。

namespace Tests\AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Bundle\FrameworkBundle\Client;

class SomeControllerTest extends WebTestCase
{
/**
* @var Client
*/
private $client;

protected setUp()
{
$this->client = self::createClient();
}

public function testSomethingOnRouteX()
{
// set up and assert
$this->client->request('GET', '/something');
}

public function testSomethingElseOnRouteX()
{
// different set up and assert
$this->client->request('GET', '/something-else');
}
}

除了 setUp(),您还可以使用 @before 钩子(Hook):

namespace Tests\AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Bundle\FrameworkBundle\Client;

class SomeControllerTest extends WebTestCase
{
/**
* @var Client
*/
private $client;

/**
* @before
*/
protected function setUp()
{
$this->client = self::createClient();
}

// ...

}

关于php - 我可以创建一个客户端并将其重复用于我的所有功能测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35207571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com