Symfony3为单元测试创​​建数据库

时间:2017-11-24 22:38:53

标签: database symfony unit-testing

晚上好: - )

我现在正在学习Symfony(3),我想对我的课程使用测试。我已经读过,单元测试不应该使用数据库,而是嘲笑它的对象。

但是尽管如此,我想在 setUp()/ KernelTestCase 数据库(eq MySQL)中创建并读取其文件内容,然后进行测试(简单 - 测试),并清除 TEARDOWN()

可以使用转储的MySQL文件吗?

什么是最好的(?懒惰)方式呢?

我宁愿阅读准备好的(转储的)类似SQL的文件然后更新:schema'来自ORM级。在Symfony3中放置文件的位置?如何阅读并创建数据库内容?

PLS。帮助我。

2 个答案:

答案 0 :(得分:3)

我多年来一直在使用它:

重复!这对我来说效率最高,因为您只加载一次测试数据;每次测试都。当然,您必须更加努力地考虑测试场景。

例如,考虑一下crud测试:

<强>测试1

  • 检查列表是否有1个项目(由灯具加载)

<强>的Test2

  • 创建项目
  • 检查列表是否有2个项目

<强> Test3的

  • 删除元素
  • 检查列表是否有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

而不是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/

https://symfony.com/doc/current/components/finder.html

https://symfony.com/doc/current/bundles/extension.html