database - Symfony 3为单元测试创​​建数据库

标签 database symfony unit-testing

晚上好:-)

我现在正在学习 Symfony(3),我想在我的类(class)中使用测试。我读过单元测试不应该使用数据库,而是应该模拟它的对象。

但尽管如此,我还是想在 setUp()/KernelTestCase 数据库(例如 MySQL)中创建并读取其文件内容,接下来进行测试(简单 -unittests),并在 <强>tearDown()。

是否可以使用转储的 MySQL 文件来实现?

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

我宁愿读取准备好的(转储的)类似 SQL 的文件,然后读取 ORM 类中的“update:schema”。 Symfony3 中文件放在哪里?如何读取它并创建数据库内容?

请。帮助我。

最佳答案

我已经使用这个多年了:

重复!这对我来说是最有效的,因为您只需加载一次测试数据; 不是对于每个测试。当然,您必须更加仔细地考虑您的测试场景。

例如,考虑一下 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/

相关文章:

Symfony 2.5.5 & FOSUserBundle : the class . ..在链配置的命名空间中找不到

javascript - gRPC 的开 Jest 模拟因手动定义而失败

unit-testing - Netbeans 11.2未找到测试

php - Symfony2 - $this->getUser() 对比 $this->get ('fos_user.user_manager' );

forms - Symfony2 无法让日期小部件工作

java - 带有断言异常的 Spring 单元测试 Java

mysql - 使用多个条件从多对多关联实体中选择实体

python - Django ManyToMany 查询交集

java - SQLite删除列: Using temporary table vs Renaming using ALTER TABLE的方法

php - Laravel Eloquent 中的复杂连接子句