获取存储在类中的异常对象时,Junit 测试失败,而不是抛出

Posted

技术标签:

【中文标题】获取存储在类中的异常对象时,Junit 测试失败,而不是抛出【英文标题】:Junit test fails when fetching Exception object stored in a class, not thrown 【发布时间】:2022-01-20 10:09:04 【问题描述】:

我有一个侦听器类,我在其中获取异常对象作为存储值。异常对象由框架存储在一个类中。稍后在侦听器中获取它以执行某些操作。

下面是要测试的实际方法:

@Override
public void afterChunkError(ChunkContext chunkContext) 
    Exception e = (Exception) chunkContext.getAttribute("sb_rollback_exception"); // LINE 1
    if (e instanceof ValidationException)  // LINE 2
        logger.error(messageSource
                .getMessage("errors.maxInteger", new String[]  "Point", "1000000" , Locale.getDefault())); 
     //insert exception details to DB.
    

junit 看起来像这样:

    RuntimeException runtimeException = new RuntimeException("My Run Time Exception");
    JobException exception = new JobException(runtimeException);
    Mockito.when(chunkContext.getAttribute("sb_rollback_exception")).thenReturn(exception);

它作为一个独立的测试用例运行良好。 mvn install 失败,因为 maven-surefire 插件运行的测试用例失败了

 Tests run: 56, Failures: 0, Errors: 1, Skipped: 0

错误是因为第一个代码块的第 1 行。 测试此用例的推荐方法是什么?

【问题讨论】:

你能分享失败吗? 【参考方案1】:

Maven 可以并行运行测试。因此,如果您正在操作/使用测试中的类级别属性,则其值可能会根据测试运行的顺序而有所不同。

解决此类问题的方法是不要有junit类级别的属性进行测试。相反,每个测试都有特定的变量。

【讨论】:

我在类中使用了一种通用方法进行 2 次测试,这导致了问题。我发现后正要来删除问题。但这很有帮助

以上是关于获取存储在类中的异常对象时,Junit 测试失败,而不是抛出的主要内容,如果未能解决你的问题,请参考以下文章

对象在类中的存储方式有哪些?

如何让 JUnit 测试(从 Ant 脚本驱动)转储导致失败的异常堆栈?

为啥 JUnit 测试异常总是失败? [复制]

将ehcache添加到DAO类后Junit测试失败,无法在测试类中实例化DAO

Junit的使用

Junit 单元测试