好的,我决定尝试从头到尾掌握整个 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。

所以这里真的有几个相关的问题:
  • 我在这一步中挣扎的事实是否意味着我应该从其他地方开始?即使登录系统对站点的其余部分相当重要?也许它并不是测试网站和数据库的最薄的功能?
  • 如果你和我在同一个地方开始,你会怎么做?你不会担心 DRY 吗?由于验收测试通过浏览器在外部测试功能,也许我无能为力?

  • 如果问题看起来有些模糊,我必须道歉,我没有人可以从这一方面学习 TDD,这是我还没有经历过“啊哈”时刻的范式转变之一。

    提前致谢。

    最佳答案

    如果您正在做 BDD,我是否建议不要从测试所有组件的最薄切片开始,而是从测试风险最高组件的最薄切片开始?

    假设有权访问系统的任何用户都已经登录。登录并不完全有风险。之前已经完成了 15,000 次。

    硬编码数据开始。从数据库中获取数据也不是很有风险。如果您可以获得一些真实的数据示例,您可以稍后对其进行编码,而不会影响场景。

    找出您最不了解系统的哪些部分。创建场景并围绕系统的这些部分进行对话。您不必从一开始就发展系统 - 您可以选择任何您喜欢的点!系统的哪些部分让你最不舒服?哪些部分让你的利益相关者最不舒服?

    这些可能是导致您的项目成功或失败的部分。登录可以稍后进行,当您开始编写代码时,您将拥有一些人们想要登录的真正值(value)。

    关于database - 我应该如何实现这个规范流步骤?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3318223/

    10-17 00:44