如何在WordPress中对HashPassword方法进行单元测试?
WordPress
HashPassword 方法单元测试正确方案 问题根因
WordPress 内置的
HashPassword()方法采用加盐哈希算法实现,每次调用时会自动生成随机盐值,因此即便输入相同的明文密码,每次返回的哈希串也会完全不同,直接固定哈希值做全等断言的方案不可行。
测试方案1:搭配官方校验方法做功能验证(推荐)
该方案贴近实际使用场景,无需关心哈希生成的内部逻辑,只需验证功能符合预期即可:
// 正向测试:正确密码可通过校验 $plainPassword = "123123"; $generatedHash = HashPassword($plainPassword); $this->assertTrue(wp_check_password($plainPassword, $generatedHash)); // 反向测试:错误密码无法通过校验,避免方法逻辑写死返回固定合法值 $wrongPassword = "456456"; $this->assertFalse(wp_check_password($wrongPassword, $generatedHash));
测试方案2:手动指定固定盐,生成固定哈希做全等断言
如果需要做更细粒度的输出校验,可以手动传入符合格式要求的固定盐值,此时HashPassword会生成固定的哈希结果:
// 固定盐值,需符合WordPress哈希盐格式要求(长度、前缀匹配) $fixedSalt = '$P$B9/8JZ6.'; $expectedHash = '$P$B9/8JZ6.epn3FhLmz4r0t9Y8u7I6o5P4a3S2d1F0g'; $plainPassword = "123123"; $result = HashPassword($plainPassword, $fixedSalt); $this->assertSame($expectedHash, $result);
注意:如果传入的盐不符合格式要求,
HashPassword内部会忽略传入值,重新生成随机盐,依旧会得到随机结果。
内容的提问来源于stack exchange,提问作者GetUnstuck
相关产品推荐
相关产品推荐

