gpt4 book ai didi

来自数据库的 PHPUnit dataProvider

转载 作者:行者123 更新时间:2023-12-05 04:13:54 24 4
gpt4 key购买 nike

我有一个简单的 PostControllerTest 类:

<?php

namespace AppBundle\Tests\Controller;

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

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

public function setUp() {
$this->client = static::createClient();

}

public function idProvider()
{
return [
["1"],
["2"],
["3"],
];
}

/**
* @dataProvider idProvider
*/
public function testGet($id)
{
$this->client->request('GET', '/post/'.$id);
$this->assertTrue($this->client->getResponse()->isSuccessful());
}
}

testGet 方法使用 idProvider 发出类似 /post/{id} 的请求并断言成功响应,其中 {id} 是数据库中 Post 实体的真实 id

一切正常,但是如果 id = 1Post 将被删除怎么办?

我需要从数据库中获取一些 id,例如最后一个或\和随机的 3 个,并将其作为 dataProvider 传递给 testGet code>(或者不是dataProvider?)

我使用 Symfony 2.8.3 和 PHPUnit 5.2.11。

如何解决?任何建议表示赞赏。谢谢!

最佳答案

在运行测试之前,您应该确保应用程序处于“正确”状态。因此,您可以使用 setUp() 方法创建一个具有给定 ID 的新帖子,然后运行测试,而不是指望帖子在那里。

针对空白的测试专用数据库运行测试可能是个好主意。这将使您的测试非常可预测,因此您不必担心将 id 从 setUp 方法传递到您的测试用例。

否则,您可以创建一个带有静态方法的辅助类来存储稍后可以提取的“事物”。另一种可能足以满足您的情况的解决方案是创建一个单独的类属性来存储帖子 ID。

希望这对您有所帮助。

关于来自数据库的 PHPUnit dataProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132977/

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