好的,我决定尝试从头到尾掌握整个 TDD 流程。
我正在 ASP.NET MVC 2 应用程序中编写一个简单的博客,并开始进行验收测试以在我实现它们时测试我的特性。我使用 SpecFlow 作为我的 BDD/ATDD 框架。
我一直在阅读“Growing Object Orientated Systems Guided by Tests ”,这就是我开始的原因。
我会在书中描述的迭代零点,在那里我正在创建“行走骨架”
我决定将登录过程作为“测试系统所有组件的最薄功能部分”开始。在这种情况下,网站本身和数据库。
所以我写了一篇详细介绍登录的故事,我写的第一个场景是成功登录。
所述场景中的给定之一是
"Given there is a registered user with the username 'TestUser' and password 'TestPassword'"
但是我不确定我将如何实现这一步。
显然,这意味着数据库中需要有一个具有给定凭据的用户。但是,就像一个优秀的小程序员一样,我希望以某种方式对密码进行哈希处理。
我想写一些可以为我插入的 DatabaseHelper 类。但是,这将包含用于散列密码的散列代码,然后应用程序本身将需要相同的散列代码,这似乎违反了 DRY。
所以这里真的有几个相关的问题:
如果问题看起来有些模糊,我必须道歉,我没有人可以从这一方面学习 TDD,这是我还没有经历过“啊哈”时刻的范式转变之一。
提前致谢。
最佳答案
如果您正在做 BDD,我是否建议不要从测试所有组件的最薄切片开始,而是从测试风险最高组件的最薄切片开始?
假设有权访问系统的任何用户都已经登录。登录并不完全有风险。之前已经完成了 15,000 次。
硬编码数据开始。从数据库中获取数据也不是很有风险。如果您可以获得一些真实的数据示例,您可以稍后对其进行编码,而不会影响场景。
找出您最不了解系统的哪些部分。创建场景并围绕系统的这些部分进行对话。您不必从一开始就发展系统 - 您可以选择任何您喜欢的点!系统的哪些部分让你最不舒服?哪些部分让你的利益相关者最不舒服?
这些可能是导致您的项目成功或失败的部分。登录可以稍后进行,当您开始编写代码时,您将拥有一些人们想要登录的真正值(value)。
关于database - 我应该如何实现这个规范流步骤?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3318223/