gpt4 book ai didi

java - 如何使用 google-truth 测试是否抛出了预期的异常?

转载 作者:太空狗 更新时间:2023-10-29 22:54:12 24 4
gpt4 key购买 nike

我只想测试是否使用 google-truth 抛出了给定消息的异常。

使用 junit 使用 @Test(expected= 很容易做到这一点,但我不知道如何用 truth 做到这一点。ThrowableSubject 附近没有样本。

对于这类测试,我应该坚持使用普通的 JUnit 吗?

最佳答案

[更新]

The Truth 作者推荐使用 JUnit 4.13/5 的 assertThrows() 机制,因为这实际上不需要 Truth 的支持。这看起来更像:

SpecificException e = 
assertThrows(SpecificException.class, () -> doSomethingThatThrows());
assertThat(e).hasMessageThat().contains("blah blah blah");
assertThat(e).hasCauseThat().isInstanceOf(IllegalStateException.class);
assertThat(e).hasCauseThat().hasMessageThat().contains("blah");

这比 try/fail/catch 更推荐,因为它更简洁,避免了“丢失失败”问题,并返回一个可以使用 Truth 中的 ThrowableSubject 断言的对象。

如果您没有assertThrows(),那么请使用 try/fail/catch 模式,因为这是清晰明确的。

try {
doSomethingThatThrows();
fail("method should throw");
} catch (SpecificException e) {
// ensure that e was thrown from the right code-path
// especially important if it's something as frequent
// as an IllegalArgumentException, etc.
assertThat(e).hasMessage("blah blah blah");
}

虽然 @Rule ExpectedException@Test(exception=...) 存在于 JUnit 中,但 Truth 团队不推荐这些,因为它们有一些您可以通过微妙(和不那么微妙)的方式编写通过但应该失败的测试。

虽然 try/fail/catch 也是如此,但 Google 在内部通过使用 error-prone 来缓解这种情况。 ,它提供静态编译时检查以确保此模式不会遗漏 fail() 等。强烈建议您使用容易出错的或其他静态分析检查来捕获这些。遗憾的是,基于规则和基于注释的方法不像这个 try/catch block 那样容易进行静态分析。

关于java - 如何使用 google-truth 测试是否抛出了预期的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38434769/

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