使用Laravel进行单元测试

tom*_*m99 5 unit-testing laravel

我在Laravel 5.5框架中使用PHP.我最近开始为我的代码编写unitTests,我有几个问题:

  1. 与数据库交互的最佳方式是什么?我应该使用像SQLite这样的InMemoryDB,还是用Mockery模拟一切.

  2. 如果我与DB的交互比仍然是unitTesting或Integration Testing?

谢谢你在普罗旺斯的答案

mrh*_*rhn 0

我在一家公司工作,我们努力实现 80% 的代码覆盖率,一般来说,我们测试主要是 End-2-End,使用数据库和模拟外部调用,我们使用 SQLite,以便我们的测试套件可以在本地环境中快速运行。当案例有意义时,我们对其进行单元测试,例如我为不同国家所做的税务服务进行单元测试,因为它非常基于输入输出。

为什么我们更喜欢 End-2-End:

  • 如果您不必进行单元、集成和端到端测试,速度会更快
  • 您测试的端点实际上将被使用
  • 如果您使用持续集成运行,我更喜欢使用真实数据库运行

SQLite 也有缺点,主要是它不能像其他 RDB 那样工作,那里有很多设置和限制,在我的脑海中,我遇到了外键强制等问题。

所以回答你的问题:

  • 至少在本地使用 SQLite 是明智的
  • 在单元测试中,您只测试一个类并模拟其他所有内容,您基本上是在测试代码是否可以执行。请注意,这是一个非常复杂的主题的过于简化的版本。