MD5代码kata和BDD

时间:2009-10-18 11:23:55

标签: md5 bdd

我正在考虑将MD5作为代码kata实现,并希望使用BDD来驱动设计(我是BDD newb)。

然而,我能想到的唯一一个测试就是传入一个空字符串,最简单的方法是将哈希嵌入到我的程序中并返回它。

这个的逻辑扩展是我最终在我的解决方案中为每个测试嵌入哈希并切换输入以决定返回什么。这当然不会导致有效的MD5程序。

我的一个困难是应该只有一个公共职能部门:

public static string MD5(input byte[])

我不知道如何测试内部结构。

我的方法是完全有缺陷还是MD5不适合BDD?

2 个答案:

答案 0 :(得分:2)

我相信你为BDD代码选择了一项非常艰苦的练习 - kata。关于code-kata的事情,或者到目前为止我对它的理解,是你不得不以小的增量步骤看到问题,这样你就可以在红色,绿色,重构迭代中执行这些步骤。

例如,在数组中查找元素位置的练习可能是这样的:

  1. 如果数组为空,则无论针元素
  2. ,位置为0
  3. 写测试。实现。重构
  4. 如果array不为空,且元素不存在,则position为-1
  5. 写测试。实现。重构
  6. 如果array不为空,并且element是列表中的第一个,则position为1
  7. 写测试。实现。重构
  8. 我真的没有看到如何在这种步骤中打破MD5算法。但那可能是因为我不是一个算法家伙。如果您更好地理解MD5算法中涉及的步骤,那么您可能有更好的机会。

答案 1 :(得分:1)

这取决于你对不合适的意思... :-)如果你想记录一些描述你的实现的例子,这是合适的。如果为每个测试添加一个字符,也应该可以从您的规范中获得算法。

只需添加一个switch语句,你只是试图“欺骗系统”。使用BDD / TDD并不意味着你必须实现愚蠢的东西。此外,您在代码中具有硬编码哈希值以及switch语句这一事实清晰的代码气味,应该重构和删除。这就是你的算法应该出现的原因,因为当你看到硬编码值时,你首先删除它们(通过计算值)然后你会看到它们都是相同的,所以你删除了switch语句。

此外,如果你的问题是关于找到好的katas,我会建议你在Kata catalogue中进行搜索。