laravel - 集成或单元测试
问题描述
我不太清楚何时应该使用集成和单元测试
如果我想在不发出任何 http 请求的情况下测试以下代码,我应该使用集成测试还是单元?
创建线程时,会记录活动并触发电子邮件事件
ThreadObserver extends Observer
{
public function created(Thread $thread)
{
Activity::record($thead);
event(new ThreadWasCreated($thread);
}
}
class RecordsActivityTest
{
public function it_records_the_acitivty_when_a_thread_is_created()
{
Thread::factory()->create();
$this->assertDatabaseHas('activities', […]);
}
}
另一个例子,我想测试它返回预期结果的查询。
class Search
{
public function __construct(protected Index $index)
{
}
public function handle($query)
{
$this->index->search($query);
// more code
}
}
class SearchTest
{
public function it_returns_the_expected_result()
{
$search = new Search(new Index);
$results = $search->handle(“some query”);
$this->assertEquals(“some
Data”);
}
}
我是否需要单元测试来测试Search
类或集成测试,因为它依赖于另一个类?
解决方案
第一个示例,我很可能会编写一个集成测试,但我不会测试数据库是否有值,而是模拟事件https://laravel.com/docs/8.x/mocking#event- fake并断言事件已被调度。
然而,第二个例子,它可以去任何一种方式。您可以编写一个单元测试并模拟所有内容,或者,您可以编写一个集成测试,以便您可以使用 Laravel 帮助程序,特别是https://laravel.com/docs/8.x/mocking#http-fake如果您“重新测试 API,否则如果您正在测试和 SDK,则为嘲弄。
推荐阅读
- java - 如何根据谷歌日历的回调识别授权用户
- selenium - 添加 Apache POI 4.0.1 库不足以使用 XSSFWorkbook
- html - 如何像这样使用 html 和 css 绘制圆圈?
- mobile - 如何修复“elementsFromPoint”“提供的双精度值是无限的。” 在移动
- c++ - Wextra 的 Qt Creator 错误不起作用
- android - 当我在 android 设备上的输入元素中使用 capture="camera" 时应用程序崩溃
- excel - 单击定义为带有 SVG 的 DIV 的按钮,该 SVG 链接到带有 VBA 的路径
- java - 运行 swt java 应用程序时出错
- php - Laravel REST API 请求对象为空
- python - 如何使用pyqt4更改QScrollarea中的滚动条颜色