Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 单元测试DABASE应用程序_Unit Testing_Tdd_Phpunit - Fatal编程技术网

Unit testing 单元测试DABASE应用程序

Unit testing 单元测试DABASE应用程序,unit-testing,tdd,phpunit,Unit Testing,Tdd,Phpunit,我正试图进入TDD领域,我很难对我拥有的几个用户模型进行单元测试。我正在尝试测试模型的验证,业务需求如下: >=需要6个字符的用户名 >=5个字符的密码,至少包含1个字母和数字 需要有效的电子邮件格式 。。。废话废话 数据库中不能已经存在用户名和电子邮件 所有需求都很容易测试,除了5,它要求数据库处于已知状态。我知道使用PHPUnit可以使用XML文件将数据库设置为已知状态,但是有更好的方法吗 我希望数据库恢复到运行测试之前的状态(即,在开发期间)。我想我可以使用MySQL事务回滚更改,或者我也

我正试图进入TDD领域,我很难对我拥有的几个用户模型进行单元测试。我正在尝试测试模型的验证,业务需求如下:

  • >=需要6个字符的用户名
  • >=5个字符的密码,至少包含1个字母和数字
  • 需要有效的电子邮件格式
  • 。。。废话废话
  • 数据库中不能已经存在用户名和电子邮件
  • 所有需求都很容易测试,除了5,它要求数据库处于已知状态。我知道使用PHPUnit可以使用XML文件将数据库设置为已知状态,但是有更好的方法吗

    我希望数据库恢复到运行测试之前的状态(即,在开发期间)。我想我可以使用MySQL事务回滚更改,或者我也可以使用两个单独的数据库,一个用于开发,一个用于测试

    我还阅读了一些文章,在单元测试中不使用实际的DB连接,而是使用模拟数据。不太清楚这是怎么回事

    有人能给我解释一下我有哪些不同的选择,哪些是最好的路线

    谢谢

    编辑:


    我想我将采用RubyonRails方法,只需设置3个独立的数据库,即生产、开发和测试。除非有人强烈反对。

    有些人说不要在数据库上测试,像我这样的人说这是唯一能让你知道你的DAO代码是否好的方法

    您需要的是两个数据库。一个用于测试,一个用于开发。最佳实践是为您的单元测试设置一个公共超类来设置数据库(可能初始化一个新的模式),然后所有的DB单元测试都在该数据库中运行。之后你可以把它清理干净

    对于您提到的测试(数据库中不能已经存在用户名和电子邮件),然后执行类似的操作(psuedocode)


    也许有点相关:所以你是说要有单独的数据库,一个用于测试,一个用于开发。或者你是说两者使用相同的数据库?因为您提到有一个单独的用于测试和一个用于部署,但没有提到一个用于主动开发。谢谢。通常你会在本地有两个数据库——一个用于私人开发,一个用于私人测试。在每次测试运行时,将拆除并重建测试组件。开发版本是一个从活动版本的克隆版本,可能每隔几天或几周刷新一次。或者在测试设置中临时添加一个重复的行。测试完成后删除该行。
    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.