Laravel进行单元测试

时间:2018-12-12 09:43:14

标签: laravel unit-testing

我正在将PHP与Laravel 5.5框架一起使用。 我最近开始为代码编写unitTests,但遇到了一些问题:

  1. 与数据库交互的最佳方法是什么? 我应该使用像SQLite这样的InMemoryDB还是用Mockery模拟所有内容。

  2. 如果我与数据库有交互,那么仍然是unitTesting或Integration Testing?

谢谢您的回答

1 个答案:

答案 0 :(得分:1)

我在一家公司中努力争取80%的代码覆盖率,通常我们主要测试End-2-End,并使用数据库和模拟外部调用,我们使用SQLite,以便我们的测试套件可以在本地环境中快速运行。在这种情况下,我们对它进行单元测试,例如,我为单元测试的不同国家/地区提供的税务服务,因为它非常基于输入输出。

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

  • 如果您不必进行单元,集成和端到端测试,则速度更快
  • 您测试了端点是否会被实际使用
  • 如果您使用Continous Integration运行,我更喜欢使用真实的数据库

SQLite有缺点,主要是它不能与其他RDB一起使用,因为它存在很多设置和限制,在我的头上,我遇到了外键强制执行等问题。

所以回答您的问题:

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