我明白单元测试的概念,但是当需要数据库功能时,我试图想出一种简洁清晰的方式来实现它。比如,我有一个函数,它基于数据库查询返回结果。那么,数据库总是需要保持不变,才能确保只返回正确的结果吗?在需要数据库操作(无论是读取、写入、更新还是删除)时,如何最好地进行单元测试(在PHP中)?
我明白单元测试的概念,但是当需要数据库功能时,我试图想出一种简洁清晰的方式来实现它。比如,我有一个函数,它基于数据库查询返回结果。那么,数据库总是需要保持不变,才能确保只返回正确的结果吗?在需要数据库操作(无论是读取、写入、更新还是删除)时,如何最好地进行单元测试(在PHP中)?
PHPUnit手册中有一个完整的章节介绍这个问题:
就像其他单元测试一样,先创建一个已知状态,然后测试代码是否返回预期结果。
个人而言,我会创建一个虚拟测试数据库,并在每次测试运行时使用已知数据集进行填充(我直接在setUp
函数中完成此操作)。然后测试将针对该数据集运行,最后在tearDown
中将其删除...
现在,这更像是一项集成测试而不是单元测试(个人而言,我会将其与其他集成测试一起按照自己的时间表运行,而不是单独运行),但它仍然非常有用。
如果需要数据库,那么它就不是单元测试。