【发布时间】:2021-07-05 11:34:55
【问题描述】:
我在 Laravel 中使用 PHPUnit 创建单元测试。在创建单元测试时,我遇到在一些测试中我需要准备数据库数据,例如选择现有记录、插入新记录等。
我根据我的应用程序功能分离了每个单元测试类。因此,例如我的应用程序有用户管理模块,那么我将有 UserManagementTests 类。在开始在这个类中运行单元测试方法之前,我想准备所有需要的数据库数据,这样我就不需要在每个方法中查询数据库来获取特定单元测试方法所需的数据。
我是 PHPUnit 新手,不知道应该用什么关键字搜索这个问题。
其他信息:
- 我的应用程序使用多个数据库
- 每个数据库都已经存在数据,并且在测试期间不应删除其中的大部分数据。因此,对于某些测试,我的选择是创建新记录、运行测试并删除创建的记录以保留数据库的原始状态 - 我使用 Laravel 的 DatabaseTransactions 特性来执行此操作。
【问题讨论】:
-
如果您的模型有工厂,您可以使用
setUp方法或测试方法中的工厂来准备所需的数据。 -
不幸的是,每节课前准备数据并不容易。在每次测试之前使用
setUp和tearDown删除数据要容易得多(或者像你一样使用特征DatabaseTransactions) -
@apokryfos 是的,这就是我意识到的......所以我只是坚持使用 DatabaseTransactions 并为每个类创建方法来准备每个测试类中的测试所需的数据。所以至少我不必在每个单元测试方法中复制相同的代码来准备数据
标签: laravel unit-testing phpunit