2009-10-18 12 views
0

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

但是,我能想到的唯一一个测试就是传入一个空字符串,最简单的工作就是将散列嵌入到我的程序中并返回它。

这样做的逻辑延伸是,我最终将散列嵌入到每个测试的解决方案中,并切换输入以决定返回的内容。当然,这不会导致MD5程序正常运行。

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

public static string MD5(input byte[]) 

而且我看不出如何测试的内部。

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

+0

@Downvoter - 谨慎评论? – Oded

回答

2

我相信你选择了一个非常艰苦的练习BDD代码卡塔。关于代码kata,或者我迄今为止所了解的内容是,您必须以小的增量步骤查看问题,以便您可以在红色,绿色和重构迭代中执行这些步骤。

例如,当发现一个阵列中的元素位置的运动,可能是这样的:

  1. 如果数组为空,则位置为0,不管针元件
  2. 写测试。实现。重构
  3. 如果数组不为空,且元素不存在,则位置为-1
  4. 写入测试。实现。重构
  5. 如果数组不为空,且元素是列表中的第一个,则位置为1
  6. 写入测试。实现。重构

我真的不知道如何在这种步骤中打破MD5算法。但那可能是因为我不是一个算法家伙。如果您更好地理解MD5算法涉及的步骤,那么您可能会有更好的机会。

1

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

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

此外,如果你的问题是关于寻找好的卡塔斯,我会建议在Kata catalogue lokking。