0

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

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

这样做的逻辑扩展是,我最终将哈希嵌入到我的解决方案中,用于每个测试并打开输入以决定返回什么。这当然不会产生一个有效的 MD5 程序。

我的困难之一是应该只有一个公共功能:

public static string MD5(input byte[])

而且我看不到如何测试内部结构。

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

4

2 回答 2

2

我相信您为 BDD 代码样式选择了一个相当困难的练习。关于 code-kata 的事情,或者我到目前为止所理解的,是你必须以小的增量步骤看到问题,以便你可以在红色、绿色、重构迭代中执行这些步骤。

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

  1. 如果数组为空,则位置为0,无论针元素如何
  2. 写测试。执行。重构
  3. 如果数组不为空且元素不存在,则位置为-1
  4. 写测试。执行。重构
  5. 如果数组不为空,并且元素是列表中的第一个元素,则位置为 1
  6. 写测试。执行。重构

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

于 2009-10-20T03:09:12.493 回答
1

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

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

此外,如果您的问题是关于寻找好的 katas,我建议您在Kata 目录中查找。

于 2009-10-20T02:56:08.483 回答