【发布时间】:2021-06-04 07:08:13
【问题描述】:
目标:
- 确定功能测试是否成功。
场景:
- 我们有一个功能要求:“用户应该能够使用用户名和密码进行注册。用户名必须是有效的电子邮件地址。密码必须至少有 8 个字符长”。
- 我们有一个方法“SignupResult UserManager.Signup(string username, string password)”。
- 我们想要一个有效输入的快乐测试和一个无效输入的悲伤测试。
- UserManager 的子系统(例如数据库)可以是模拟系统或真实系统。
问题: 确定用户是否成功注册的最佳方法是什么。我可以想象以下选项:
- 如果任何子系统被模拟,可以检查是否调用了诸如“DB.SaveUser(...)”之类的特定函数。这会破坏功能测试是黑盒测试的想法,并要求测试编写者了解实现。
- 如果我们使用真正的子系统,例如可以检查数据库中的行是否存在。像上面的尝试那样,这还不够。
- 可以使用另一个函数,如“UserManager.CheckUser(...)”来检查用户是否已创建。这将引入另一种经过测试的方法,也可能存在没有“测试对应物”的操作,或者必须实现它们,只是为了测试 - 这似乎并不理想。
- 我们可以检查结果“SignupResult”和/或检查抛出的异常。这将需要定义方法的接口。这也需要所有方法都返回一个合理的值——我想这无论如何都是一个好方法。
对我来说,最后一种方法似乎是可行的方法。我对么?还有其他方法吗?我们如何检查诸如“一封电子邮件已发送给新用户”之类的副作用?
【问题讨论】:
标签: testing tdd functional-testing