Qui*_*ist 4 mysql phpunit laravel laravel-5.5
我是 PHPUnit(以及一般的单元测试)的新手。我想开发一个测试套件,开发人员可以在本地运行,但也可以在我们的集成系统 (Codeship) 中运行。我知道可以使用内存数据库,但这似乎依赖于我们没有使用的迁移(似乎不能很好地处理视图、存储过程、函数、触发器等?) .
1)在内存中创建数据库并使用默认数据(用于所有测试)为数据库设置种子的最佳方法(放置在 Laravel 中)是什么?
您可以使用 SQLite。
从文档:
SQLite 数据库通常存储在单个普通磁盘文件中。但是,在某些情况下,数据库可能存储在内存中。
将此添加到config/database.php文件中:
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
Run Code Online (Sandbox Code Playgroud)
在phpunit.xml文件上,在<php>节点下:
<env name="DB_CONNECTION" value="sqlite_testing" />
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多。
其他解决方案
在您的storage/文件夹上创建一个测试数据库,使用名称database.sqlite或者如果您想要另一个名称或其他位置,您必须更改 config/database.php 文件上的配置,这些是默认配置:
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path('database.sqlite'),
'prefix' => '',
],
Run Code Online (Sandbox Code Playgroud)
使用此命令运行您的迁移:
php artisan migrate --database=sqlite
Run Code Online (Sandbox Code Playgroud)
或将此行添加到.env文件中:
DB_CONNECTION=sqlite
Run Code Online (Sandbox Code Playgroud)
您的应用程序正在将 sqlite 用于phpunit。
现在您可以运行您的迁移和测试。之后,只需将 更改DB_CONNECTION为您用于项目的数据库。
这不是您可能正在寻找的答案,而是更多需要考虑的替代解决方案。
根据我的经验,我发现阻力最小的方法是实际模拟您的模型(或查询生成器,如果您正在使用它)并让它们返回您需要的结果。
在开发测试时,您应该始终考虑哪些依赖项可以从测试中完全删除,以便您可以将注意力集中在当时尝试测试的内容上。
运行内存数据库与生产数据库的工作方式之间也可能存在细微差别(很可能非常微小),这最终会损害测试的完整性,甚至可能最终给您带来误报。如果您使用查询生成器,并且您最终可能需要实际开发不同的查询(例如 MySQL 和 sqlite 之间的不同语法),则尤其如此,具体取决于查询本身的工作环境。
| 归档时间: |
|
| 查看次数: |
5090 次 |
| 最近记录: |