如果使用ORM层,如何在PHP中进行单元测试?

dan*_*car 7 php phpunit unit-testing

我有一个班让我们说人.ORM层已经基于sql结构生成了相应的对象.班级人员有一个方法:Get($ id).在Get方法中,调用对象Person并检索表中的字段.

我基本上想要进行以下单元测试:创建一个新人并检查Get方法是否返回正确的信息.

  • 如何在这种情况下进行单元测试?
  • 我是否需要创建一个单独的数据库(只是结构),并从该数据库创建/选择?
  • boostrap文件是否应该加载与我正在使用的框架相同的配置,但是更改配置文件以便它可以与假数据库一起使用?
  • 每次测试后我应该每次清理新数据库吗?

    如果在没有实际构建新数据库的情况下模拟ORM响应,那么在看到您的响应后我也在徘徊?

  • cwe*_*ske 8

    如何在这种情况下进行单元测试?

    通常,您应该将您的单元测试分为两部分:

    • 您的代码的一部分在没有数据库的情况下是可测试的,因此您可以存根或模拟执行数据库访问的方法
    • 测试的另一部分需要使用数据库,因为它测试ORM是否正确使用.

    我是否需要创建单独的数据库

    这取决于您的需求.Rails应用程序通常具有测试/开发/生产"环境" - 数据库,配置,存储目录.测试用于运行单元测试,用于开发事物的开发和用于运行实时服务器的生产.在开发时,您将针对开发配置以及开发数据库运行.对于单元测试,使用测试环境,其优点是数据库中的用户不会被删除或损坏.

    我喜欢这个概念; 在我的phpunit测试中,我经常在引导程序中有一个开关,用于更改加载的配置文件.请记住,您的开发数据库通常包含的数据多于单个单元测试所需的数据,您可能手工制作了这些数据并且不想丢失.此外,另一个数据库不花钱.

    每次测试后我应该每次清理新数据库吗?

    我大多只清理将在测试中使用的表.清理数据库可确保您不会受到先前测试的副作用.