gpt4 book ai didi

unit-testing - 单元测试数据库应用程序

转载 作者:行者123 更新时间:2023-12-04 05:11:45 28 4
gpt4 key购买 nike

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

  • >= 需要 6 个字符的用户名
  • >= 5 个字符的密码,至少包含 1 个字母和数字
  • 需要有效的电子邮件格式
  • ... 等等等等
  • 数据库中不能存在用户名和电子邮件

  • 除 5 项要求数据库处于已知状态外,所有要求都易于测试。我知道使用 PHPUnit 我可以使用 XML 文件将我的数据库设置为处于已知状态,但是有更好的方法吗?

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

    我还在某处阅读了在单元测试中不使用实际数据库连接,而是使用模拟数据的地方。不太确定这是如何工作的。

    有人可以向我解释我有哪些不同的选择,哪些是最佳路线?

    谢谢

    编辑:

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

    最佳答案

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

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

    对于你提到的测试(用户名和电子邮件不能已经存在于数据库中)然后做这样的事情(伪代码)。

    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.

    关于unit-testing - 单元测试数据库应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128009/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com