gpt4 book ai didi

java - 我应该如何处理自定义 Hamcrest 匹配器中的异常?

转载 作者:行者123 更新时间:2023-11-30 08:33:20 25 4
gpt4 key购买 nike

我正在使用 JUnit 和 Hamcrest 进行一些自动化测试。为了使我的测试更具可读性,我想制作一个自定义匹配器,但是我在 matchesSafely 方法中调用的代码可能会引发异常。我不确定如何处理此类异常,因为 matchesSafely 的方法签名不允许抛出异常。

举例说明:

public static Matcher<Session> hasObjectOfType(final Class<?> cls) {
return new TypeSafeMatcher<Session>() {
/* describeTo method skipped for brevity */
protected boolean matchesSafely(Session session) {
return session.provideList(cls.getName()).iterator().hasNext();
}
}
}

所以这里发生的是 session.provideList 声明了一个已检查的异常,我需要以某种方式处理它。我看到了两种可能的处理方式,但也许我忽略了一些东西:

  1. 捕获已检查的异常并将其包装在运行时异常中然后抛出。
  2. 捕获已检查的异常并返回 false。实际上,我使用的是 TypeSafeDiagnosingMatcher,所以这里的一个问题是,对于两种可能的情况,不匹配描述应该(可能?)不同:空列表或抛出的异常。

在任何情况下,哪种方法是处理异常的最佳实践?

最佳答案

您希望能够尽快调试失败的测试。因此:您应该更喜欢选项 1。

因为在那种情况下,您的“封闭”测试将因该运行时异常而失败;它将向您打印异常内容。这样您就知道测试失败的位置和原因。

将其与以下内容进行比较:默默地将异常变为“false”;并以 assertThat 结束,告诉您匹配失败。也许你最终可以设法给出一个有意义的信息;但仍然:你必须投入一些“能量”才能到达那里。选项 1 免费提供 - try/catch rethrow。

因此,我的建议是:选择选项 1 - 看看它对你有何作用。如果出于某种原因这还不够好;然后投入更多时间,看看选项 2 是否会以某种方式改善情况。

关于java - 我应该如何处理自定义 Hamcrest 匹配器中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532343/

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