我有一个totp验证器项目,它使用totp(RFC6238)生成一个六位数的一次性密码。在内部,它使用apache commons编解码器中的base32类:
Base32 base32 = new Base32();
在commons编解码器升级1.14->1.15之后,单元测试开始失败:
@Test
void testInvalidBase32Value() {
String secretKey = "AHXQ2W5P6AGKYVK";
Executable when = () -> generator.generateOtp(secretKey);
assertThrows(IllegalArgumentException.class, when);
}
org.opentest4j.AssertionFailedError: Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown.
我如何修正测试?
1条答案
按热度按时间7hiiyaii1#
根据apache commons codec 1.15发行说明,默认解码策略已更改:
base32/base64/bcodec:添加了严格的解码属性来控制尾随位的处理。默认宽大模式会无误地丢弃它们。严格模式引发异常。
basencodec.java中定义了新的默认解码策略:
要修复单元测试,请在中将解码策略设置为codecpolicy.strict
generateOtp()
:现在,导致编解码器失败的数据应该引发异常。