php-MySQL上数据库事务内的Codeception验收测试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-MySQL上数据库事务内的Codeception验收测试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1764字,纯文字阅读大概需要3分钟。
内容图文
![php-MySQL上数据库事务内的Codeception验收测试](/upload/InfoBanner/zyjiaocheng/887/3a00a50865344e6895f7d8013f1d8638.jpg)
使用Codeception为我们的Custom(带有Symfony组件和Doctrine)框架编写验收测试.我们有一套实用方法,供我们的Phpunit测试分别使用,用于创建要测试的各种实体.这包括诸如用户和其他相关数据之类的东西.
就我们的Codeception测试而言,我们希望利用此功能,使我们可以播种自定义数据并在之后进行清理.在我们的单元测试中,这是由事务处理的.鉴于Codeception通过Phantomjs通过HTTP向我们的应用程序发出请求,因此它无法利用事务,因为已为测试所用的数据库创建了一个单独的数据库连接(看起来可以使用Dbh来实现,但这不受支持)由MySQL提供,因为不支持嵌套事务.这样的结果是验收测试可以播种数据,但是除非持久化数据,否则该数据在外部请求中不存在.
我能想到的唯一其他解决方案是在测试套件运行之前触发数据库转储.将我们的测试数据保留到数据库中,以便外部请求可以访问它,然后在测试套件完成后还原转储的数据库.但是,我们有一个相当大的数据库,这将增加运行测试套件的大量开销.
我希望还有其他选择,或者我们可以尝试其他方法.
谢谢.
解决方法:
总是有其他选择:).
在我的情况下,使用转储是不可能的,因为我们还有一个非常大的数据库(精简后的容量为1.2 GB,实时大于250GB).
相反,我有一堆.sql文件,它们删除了特定测试插入的所有记录.
我有一个类DbHelper,它具有运行查询的功能:
public function executeOnDatabase($path_to_sql_file)
{
$sql = file_get_contents($path_to_sql_file);
$dbh = $this->getModule('Db')->dbh;
$this->debugSection('Query', $sql);
$sth = $dbh->prepare($sql);
return $sth->execute();
}
可以作为一种魅力,而无需再运行测试.
更新:
如果您处理用户及其相关数据,通常很容易将需要删除的所有记录作为目标.用户名和电子邮件很可能是唯一的,您可以使用它们来获取用户的ID(自动递增主键).该ID可能在相关表中使用.
例如这样:
SET @user_id = (SELECT `id` FROM `users` WHERE `username` = 'rgsfdg');
SET @email = 'fdsgds@hgdhf.nl';
DELETE FROM `mail_queue` WHERE `send_to` = @email;
DELETE FROM `user_settings` WHERE `user_id` = @user_id;
DELETE FROM `users` WHERE `id` = @user_id;
内容总结
以上是互联网集市为您收集整理的php-MySQL上数据库事务内的Codeception验收测试全部内容,希望文章能够帮你解决php-MySQL上数据库事务内的Codeception验收测试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。