晚上好: - )
我现在正在学习Symfony(3),我想对我的课程使用测试。我已经读过,单元测试不应该使用数据库,而是嘲笑它的对象。
但是尽管如此,我想在 setUp()/ KernelTestCase 数据库(eq MySQL)中创建并读取其文件内容,然后进行测试(简单 - 测试),并清除 TEARDOWN()
可以使用转储的MySQL文件吗?
什么是最好的(?懒惰)方式呢?
我宁愿阅读准备好的(转储的)类似SQL的文件然后更新:schema'来自ORM级。在Symfony3中放置文件的位置?如何阅读并创建数据库内容?
PLS。帮助我。
答案 0 :(得分:3)
我多年来一直在使用它:
重复!这对我来说效率最高,因为您只加载一次测试数据;每次测试都不。当然,您必须更加努力地考虑测试场景。
例如,考虑一下crud测试:
<强>测试1 强>:
<强>的Test2 强>:
<强> Test3的强>:
因此测试必须按此顺序执行。如果您在每次测试之间加载灯具,则不必处理该订单,但这会使您的测试变慢。
我觉得加载灯具一次更好,因为它会像用户通常那样:创建,删除,更新项目......因此,您可以检查每个操作之间没有副作用。
我的加载装置脚本:
#!/bin/bash
echo "##########################################################################"
echo "# Refresh data model, reload all reference data, load fixtures, #"
echo "# validate schema for the dev env. #"
echo "##########################################################################"
php bin/console doctrine:database:create --if-not-exists --env=dev
php bin/console doctrine:schema:drop --force --env=dev
php bin/console doctrine:schema:create --env=dev
php bin/console doctrine:schema:validate --env=dev
php bin/console doctrine:fixtures:load -n --env=dev
echo -e " --> DONE\n"
或者,如果要为SQL文件加载数据库,请使用:
php bin/console doctrine:database:import db.sqb --env=dev
而不是load fixtures命令。
然后,启动测试:
./bin/simple-phpunit --debug --verbose $1
$1
是指定要加载的测试套件的参数。 (main,front,API,backend ...),您可以在phpunit.xml.dist
文件中进行参数设置。 (您可以省略它来运行所有测试)
答案 1 :(得分:0)
我的解决方案是:
这将所有SQL文件加载到MySQL TEST DB - 在'parameters_test.yml'
中定义并处理测试并在下一次测试之前丢弃所有数据库表,并再次使用下一次测试......可以使用命令更短,更正确地执行{@ 1}}正如@ Tokeeen.com所说。谢谢你的帮助。
php bin/console doctrine:database:import ...
有用的链接:
How to remove all MySQL tables from the command-line without DROP database permissions?
https://davidegan.me/parse-yaml-in-php-using-symfony-yaml/