我有一个悖论。
在构建实现之前,我正在尝试使用 TDD 为我的密码哈希方法构建测试。但是我不知道如何事先提出预期值,而无需先构建实现。
当然,通过简单的散列实现,我可能会找到一个站点来根据已知的密码/盐创建预期值。
我打赌解决方案是对 TDD 进行例外处理,并首先放弃构建我的测试。相反,构建我的实现以提出正确的盐/哈希值,然后针对这些值构建我的测试以防止回归。
但我想我会发布这个,看看是否有我没有想到的解决方案。
或者,也许有人可以在他们的头脑中生成哈希值,以便首先构建测试。
我有一个悖论。
在构建实现之前,我正在尝试使用 TDD 为我的密码哈希方法构建测试。但是我不知道如何事先提出预期值,而无需先构建实现。
当然,通过简单的散列实现,我可能会找到一个站点来根据已知的密码/盐创建预期值。
我打赌解决方案是对 TDD 进行例外处理,并首先放弃构建我的测试。相反,构建我的实现以提出正确的盐/哈希值,然后针对这些值构建我的测试以防止回归。
但我想我会发布这个,看看是否有我没有想到的解决方案。
或者,也许有人可以在他们的头脑中生成哈希值,以便首先构建测试。
我不知道您是否正在编写自己的散列函数,例如 sha-1(在这种情况下只是不这样做)或者您正在使用外部散列和随机函数来生成盐等。在第二种情况下,您不需要必须知道你的输出。您只需模拟您的哈希和随机提供程序,并检查它们是否在您的输入和/或部分结果上被调用
所以,基本上你在做 TDD 时应该知道“预期”的输出。在您的情况下,预期输出是散列函数的结果。
如果您正在实施已知的散列算法,那么从他们的站点获取测试结果或手动生成它们都不是问题。
如果您正在开发自己的算法。您还应该通过实现算法实现的原型来知道预期的输出。即使您不知道它们是否正确,您也只是假设它们正确并在测试中使用值。如果散列函数的实现发生变化,那些测试就会变成红色。