gpt4 book ai didi

php - 使用 PHPUnit 的测试数据库/数据进行功能测试

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

我是 PHPUnit 测试的新手,非常感谢您的帮助,看看我是否遵循了正确的方法。

我正在尝试测试我的方法;我有两个问题

1) 如何让我的测试数据库包含虚拟数据?现在我在 pdo_connect 类和该类的构造函数中拥有我所有的数据库设置,我正在做所有的数据库初始化,包括 dbname,host,...;我已经包括了我想在这里测试的方法和我的测试用例;我的问题是根据不同的环境更改我的数据库以进行测试是否是一个好习惯;例如,如果我设置中的“环境”变量是“测试”,我使用具有虚拟数据的“测试”数据库和...

2) 另外,如果您确认我下面提到的示例测试用例是对我的方法进行功能测试的正确方法,我将非常感激!

static public function get_images($id) {
try {
$conn = new pdo_connect();
$query = " SELECT ....";
$result = $conn->prepare($query);
$result->bindParam(':id', $id);
$result->execute();
$array_result = $result->fetchAll(PDO::FETCH_OBJ);
$result_Set = array($paginate_result, TRUE);
}
catch (Exception $e) {
$result_Set = array($e->getMessage(), FALSE);
}
return $result_Set;
}

和我的测试:

class SomeTest extends PHPUnit_Framework_TestCase {
public function __construct() {
require_once('../includes/model.php');
}
public function test_id_not_exist() {
$con = $this->getMock('conn');
$dao = new Model($con);
$result = MODEL::get_images(555);
$expected = array(array(), True);
self::assertEquals($expected, $result);
}
}

如果您需要更多说明,请告诉我...再次感谢...

最佳答案

作为一般规则:测试静态函数可能会很棘手,但在您的情况下它可能会起作用。

如果这是您的实际代码,您不能切换到测试数据库,因为您在 get_images 中使用 $conn = new pdo_connect() 进行连接。

您需要的是某种依赖注入(inject)方式来插入连接。您无需模拟它,只需使用与测试数据库的真实连接即可。

你可以这样做:

class Model {
private static $_conn;

public static function setDb($conn) {
self::$_conn = $conn;
}


static public function get_images($id) {
try {
$conn = self::$_conn;
...
} catch (Exception $e) {
$result_Set = array($e->getMessage(), false);
}

return $result_Set;
}
}

您的测试将变成这样(我还删除了一些其他问题):

public function test_id_not_exist() {
$con = new pdo_connect();
Model::setDb($con);
$result = Model::get_images(555);
$expected = array(array(), True);
$this->assertEquals($expected, $result);
}

要正确地为您的测试数据库提供种子,您可以在测试类中实现一个 setUp 函数,然后它可以插入一些虚拟数据。

关于php - 使用 PHPUnit 的测试数据库/数据进行功能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24175487/

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