晚上好:-)
我现在正在学习 Symfony(3),我想在我的类(class)中使用测试。我读过单元测试不应该使用数据库,而是应该模拟它的对象。
但尽管如此,我还是想在 setUp()/KernelTestCase 数据库(例如 MySQL)中创建并读取其文件内容,接下来进行测试(简单 -unittests),并在 <强>tearDown()。
是否可以使用转储的 MySQL 文件来实现?
什么是最好的(?懒惰的)方法?
我宁愿读取准备好的(转储的)类似 SQL 的文件,然后读取 ORM 类中的“update:schema”。 Symfony3 中文件放在哪里?如何读取它并创建数据库内容?
请。帮助我。
最佳答案
我已经使用这个多年了:
- 使用 DoctrineFixtures bundle 加载测试数据
- 启动测试
重复!这对我来说是最有效的,因为您只需加载一次测试数据; 不是对于每个测试。当然,您必须更加仔细地考虑您的测试场景。
例如,考虑一下 crud 测试:
测试1:
- 检查列表中是否有 1 项(由灯具加载)
测试2:
- 创建项目
- 检查列表中有 2 项
测试3:
- 删除元素
- 检查列表中是否有 1 项
因此测试必须严格按照这个顺序执行。如果您在每次测试之间加载固定装置,则不必考虑该顺序,但这会使您的测试变慢。
我觉得加载一次固定装置更好,因为它将像用户通常所做的那样:创建、删除、更新项目......因此您可以检查每个操作之间没有副作用。
我的加载装置脚本:
#!/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
而不是加载夹具命令。
然后,启动测试:
./bin/simple-phpunit --debug --verbose $1
$1
是指定要加载的测试套件的参数。 (主要、前端、API、后端...)您可以在 phpunit.xml.dist 文件中对其进行参数化。 (您可以省略它来运行所有测试)
关于database - Symfony 3为单元测试创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47480826/