gpt4 book ai didi

java - 如何使用 jUnit 5 Assertions 检查异常消息是否以字符串开头?

转载 作者:行者123 更新时间:2023-11-30 01:45:17 24 4
gpt4 key购买 nike

我使用org.junit.jupiter.api.Assertions断言抛出异常的对象:

Assertions.assertThrows(
InvalidParameterException.class,
() -> new ThrowingExceptionClass().doSomethingDangerous());

简单来说,抛出的异常有一个可变部分dateTime在其消息中:

final String message = String.format("Either request is too old [dateTime=%s]", date);
new InvalidParameterException(message);

从我使用的版本开始 5.4.0 Assertions 提供三种检查异常是否抛出的方法:

它们都没有提供检查字符串是否另一个字符串开头的机制。最后两个方法仅检查字符串是否相等。如何轻松检查异常消息是否以 "Either request is too old" 开头因为同一个 InvalidParameterException 内可能会出现更多消息变化?

<小时/>

我希望有一个方法 assertThrows​(Class<T> expectedType, Executable executable, Predicate<String> messagePredicate)其中谓词将提供抛出的 message当 if 谓词返回 true 时断言通过如:

Assertions.assertThrows(
InvalidParameterException.class,
() -> new ThrowingExceptionClass().doSomethingDangerous()
message -> message.startsWith("Either request is too old"));

遗憾的是,它不存在。有什么解决办法吗?

最佳答案

assertThrows() 方法返回预期类型的​​异常实例(如果有)。然后,您可以手动从 is 获取消息并检查它是否以您想要的字符串开头。

这是来自 doc 的示例

@Test
void exceptionTesting() {
Exception exception = assertThrows(ArithmeticException.class, () ->
calculator.divide(1, 0));
assertEquals("/ by zero", exception.getMessage());
}

关于java - 如何使用 jUnit 5 Assertions 检查异常消息是否以字符串开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58269655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com