代码之家  ›  专栏  ›  技术社区  ›  Oded

MD5代码KATA和BDD

  •  0
  • Oded  · 技术社区  · 15 年前

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

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

    这种方法的逻辑扩展是,我最终会在解决方案中为每个测试嵌入散列,然后打开输入来决定返回什么。当然,这不会导致一个有效的MD5程序。

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

    public static string MD5(input byte[])
    

    我不知道如何测试内部。

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

    2 回复  |  直到 10 年前
        1
  •  2
  •   Ionuț G. Stan    15 年前

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

    例如,在数组中查找元素位置的练习可能如下所示:

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

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

        2
  •  1
  •   Cellfish    15 年前

    这取决于你所说的不合适…:-)如果您想要记录一些描述您的实现的示例,那么它是合适的。如果您为每个测试再添加一个字符,那么也可以从您的指定中产生算法。

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

    另外,如果你的问题是寻找好的卡塔,我建议你在 Kata catalogue .