为PHPUnit模拟MySQL数据库

时间:2011-08-10 16:51:54

标签: mysql mocking phpunit

我正在尝试为我的Yii项目构建单元测试。

问题:MySQL数据库。我不想每次运行测试时都运行MySQL数据库,因为它很慢,不可靠,也许有些团队成员没有设置等等。

似乎有一种方法可以在内存中使用SQLite DB并使用它,但是Yii生成的SQL似乎不像SQL上那样在MySQL上运行。我收到很多错误。

简而言之:我想在内存中模拟MySQL数据库。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

将您的MySQL操作封装在Data Access Object中。您不仅可以从业务逻辑中隐藏具有其他优势的SQL,还可以在测试应用程序的其余部分时使用mock DAO。模拟不需要数据库,并允许您验证业务逻辑是否正在调用数据层。

这与Mchl的答案类似,但是将模拟移动到一层。我发现模拟findUserByEmail()而不是各种mysqli方法要容易得多。您可以将SQL验证留给DAO测试,并在集成测试中针对数据库运行。

答案 1 :(得分:1)

一种方法是模拟连接对象并检查是否使用预期的SQL调用了query()方法。您需要另一种方法来验证您期望的SQL是否正确。这可以作为一组单独的测试(或者甚至移到测试套件之外)来完成,这样它就不会与所有其他测试一起运行。