即使抛出异常,也可以观察到(并测试)一些副作用。我的示例测试代码如下:
final SoftAssertions softly = new SoftAssertions();
try {
/*
* May throw an exception
*/
doSmth();
} catch (final IOException ioe) {
/*
* How do I add a soft assertion wrapping an exception?
*/
}
/*
* Testing for side effects.
*/
softly.assertThat(...).as("%s exit code", ...).isEqualTo(0);
softly.assertThat(...).as("the number of downloaded files").isEqualTo(3);
softly.assertThat(...).as("this should be true").isTrue();
softly.assertThat(...).as("and this should be true, too").isTrue();
softly.assertAll();
从抛出的异常中创建另一个软断言的最佳方法是什么?使用原始TestNG API,我可以简单地编写
softly.fail(ioe.toString(), ioe);
但是AssertJ似乎没有提供任何类似的东西。到目前为止,我的最佳选择是向catch块添加如下所示的smth:
softly.assertThat(true).as(ioe.toString()).isFalse();
如何使正在测试的代码引发的异常显示为结果assertionerror
的原因(或禁止的异常)?目前,我做以下工作:
Throwable failure = null;
try {
doSmth();
} catch (final IOException ioe) {
failure = ioe;
}
try {
softly.assertAll();
} catch (final AssertionError ae) {
if (failure != null) {
if (ae.getCause() == null) {
ae.initCause(failure);
} else {
ae.addSuppressed(failure);
}
}
throw ae;
}
--但更优雅的版本是非常受欢迎的。
对于问题1,Xaero的建议很有效。
但是,为了解决这两个问题,可以尝试使用catchthrowable
和fail(String failureMessage,Throwable realCause)
(或者软断言)。
如果捕获了一个nonnull throwable(这意味着测试中的代码确实引发了异常),则可以使用fail
构建一个带有自定义错误消息的assertionerror
,并将捕获的异常作为assertionerror
的原因传递。
代码如下所示:
Throwable thrown = catchThrowable(() -> { doSmth(); });
if (thrown != null) {
softly.fail("boom!", thrown);
} else {
softly.assertThat(...).as("%s exit code", ...).isZero();
softly.assertThat(...).as("the number of downloaded files").isEqualTo(3);
softly.assertThat(...).as("this should be true").isTrue();
softly.assertThat(...).as("and this should be true, too").isTrue();
}
上面的代码让我有点不舒服,因为它测试两个不同的场景,一个是抛出异常,另一个是没有异常。创建两个测试用例可能是个好主意,这将简化测试和断言部分(我相信)。
不管怎样,希望能有所帮助!
我有一个基于Spring的webapp,我的问题是在代码更改后,我开始出现延迟加载异常。下面我详细描述了这种情况: 在开始的时候 我有一个账户和文字实体。一个帐户可以有多个单词,一个单词可以分配给多个帐户。 一个ccount.class 单词班 除了每个账户只能有一个“WordForToday”,它由账户中映射的单词实体表示。类如下: 一切都正常工作。特别是我有一个@Schedilly方法,每天调
我需要做的是,当抛出异常时,我需要将处理延迟一段可配置的时间,比如15分钟。这将给服务器一些时间来稳定,而不是不必要地保持轮询。我正在使用骆驼的errorHandler机制,但它似乎不起作用。Camle不停地收到请求,没有任何延迟。请帮助解决这个问题。下面是束上下文快照:
我有以下实体结构: 因此,我在每个实体类的顶部定义了以下命名实体图,这样我就可以优化我的查询,以确定我需要走多远: 路线: 停止: 孩子: 联系人: 我在我的仓库类中使用它们: 然而,我看不到正在进行任何连接查询,当我试图访问stops的子级时,会抛出一个lazyinit异常。我的理解是,这就是如何使用实体图来优化查询(例如,当我必须为每个单独的站点取子对象时,n 1问题),但我没有运气让它工作。
我想测试一个特定的方法是否可以毫无例外地处理一组字符串。因此,我想使用AssertJ的软断言,比如: 不幸的是,我必须坚持使用AssertJ 1。x分别是Java 6,所以我不能利用这一点: 有没有办法用AssertJ(或JUnit)做到这一点?
问题内容: 我有一个div“框”,当用户滚动到下一页时,它会逐渐使用“ .fp-viewing”作为锚点淡入淡出以开始过渡效果。问题是,当触发.fp- viewing时,页面开始滚动,并且在动画结束之前将框滚动出视图。 触发.fp-viewing时,如何延迟滚动开始,直到box在4s内完成动画播放? 问题答案: 您可以使用fullpage.js提供的选项来取消运动。
我这里少了点什么。我做错什么了吗?