问题描述
|
我正在尝试进入TDD领域,并且正在艰难地测试我拥有的一些用户模型。我正在尝试测试模型的验证,业务需求如下:
> =需要6个字符的用户名
> = 5个字符的密码,至少包含1个字母和数字
需要有效的电子邮件格式
... 等等等等等等
用户名和电子邮件不能已经存在于数据库中
除5(要求数据库处于已知状态)外,所有要求都易于测试。我知道使用PHPUnit可以使用XML文件将数据库设置为已知状态,但是还有更好的方法吗?
我想要的是数据库恢复到运行测试之前(即在开发过程中)的状态。我想我可以使用MysqL事务来回滚更改,或者我也可以使用两个单独的数据库,一个用于开发,一个用于测试。
我还在某个地方读到不使用单元测试中的实际数据库连接,而是使用模拟数据。不太确定如何工作。
有人可以向我解释我有哪些不同的选择,哪些是最好的路线?
谢谢
编辑:
我想我将采用Ruby on Rails的方法,只是建立了3个独立的数据库,即生产,开发和测试。除非有人强烈反对。
解决方法
有人说不要在数据库上进行测试,而像我这样的人则说这是您知道DAO代码是否良好的唯一方法。
您需要的是两个数据库。一种用于测试,另一种用于开发。最佳实践是为您的单元测试创建一个通用的超类,以建立数据库(可能会初始化一个新的架构),然后所有数据库单元测试都在该数据库中运行。之后您可以清理它。
对于您提到的测试(数据库中不存在用户名和电子邮件),请执行以下操作(伪代码)。
Create user with username that you know doesn\'t exist (say username-largerandomuuid)
Insert user.
Assert user was created
Insert same user(name)
Assert error is thrown.