use*_*562 6 tdd phpunit dbunit unit-testing
我最近使用PHPUnit参与了一些TDD.我必须测试一个数据库驱动的应用程序,并阅读DbUnit扩展,我计划在未来几周内研究和实施.
然而,我自己也遇到了这个人的演讲 - 塞巴斯蒂安·贝格曼 - 他有一张标题为"如果可以的话,避免对MySQL进行测试"的幻灯片,这对我的逃避产生了一些怀疑.
有人可以解释我不应该针对MySQL进行测试的原因吗?
谢谢
两个原因:
相反,正如作者建议你应该在内存数据库中测试你的DAL,比如SQLite.这消除了上述问题.
但是,这种方法也有其缺点 - 您可能在将SQL从一个数据库方言移植到SQLite时遇到问题.这自然意味着您将无法测试DAL的MySQL特定部分.一如往常,这是一把双刃剑 - 你的单元测试的速度和隔离,但你失去信誉(如果我们可以这样调用它) - 如果它在SQLite的过去了,你可以100%肯定它的工作原理上的MySQL?
将DAL/DAO测试的核心保留在集成测试阶段可能并不是一个坏主意,在这个阶段,您将再次测试它们使用的真实数据库引擎,并为单元测试留下小东西; 例如映射(如果你使用ORM).
编辑:快速绝不是严格的要求 - 这只是一个很好的一般建议.在做TDD的开发人员运行单元测试了很多(这样的想法,每次提交到本地回购/每重要的代码更改都需要通过运行单元测试代码库的完整性检查) -也许不是所有的人,但肯定一些.您希望此过程快速.
现在,慢速测试通常会这样结束:
编写未运行的测试,几乎杀死了编写它们的目的.
这件事发生在和我一起工作的朋友身上; 他的团队运行测试套件+/- 20分钟(DAL测试做得不好,IoC容器参与测试),开发人员开始运行一些测试,很快"Current build breakers"电子邮件变成了日常用品.他们有相当大的套房,但破坏测试并没有那么糟糕.
总的来说,你的方法似乎是正确的 - 我不会将测试移到SQLite.像我建议的那样,使用集成测试套件测试数据库层(这样它可以比常规的单元测试套件单独运行).