好的,我决定尝试从头到尾掌握整个 TDD 过程。
我正在 ASP.NET MVC 2 应用程序中写一个简单的博客,并开始进行验收测试以在我实现它们时测试我的功能。我使用 SpecFlow 作为我的 BDD/ATDD 框架。
我一直在阅读“以测试为导向的面向对象系统的增长”,这就是我开始这样的原因。
我将在书中描述为迭代零的点,我正在创建“行走的骨架”
我决定将登录过程作为“测试系统所有组件的最薄功能部分”开始。在这种情况下,网站本身和数据库。
所以我写了一个详细介绍登录的故事,我写的第一个场景是成功登录。
上述场景中的一个给定条件是
"Given there is a registered user with the username 'TestUser' and password 'TestPassword'"
但是我不确定我将如何实施这一步。
显然,这意味着数据库中需要有一个具有给定凭据的用户。但是,就像一个优秀的小程序员一样,我希望密码以某种方式进行散列。
我想写一些可以为我插入的 DatabaseHelper 类。但是,这将包含散列代码来散列密码,然后应用程序本身将需要相同的散列代码,这似乎违反了 DRY。
所以这里真的有几个相关的问题:
- 我在这一步中挣扎的事实是否意味着我应该从其他地方开始?即使登录系统对站点的其他部分相当重要?也许它不是测试网站和数据库的最薄的功能部分?
- 如果你和我从同一个地方开始,你会怎么做?你不会担心 DRY 吗?由于验收测试通过浏览器在外部测试功能,我可能无能为力吗?
如果这个问题看起来有点模糊,我不得不道歉,我没有人可以从这方面学习 TDD,这是我还没有那种“啊哈”时刻的范式转变之一。
提前致谢。