压马路的时间 2024-06-15 17:06 采纳率: 0%
浏览 28
已结题

idea Test注解测试运行成功但是无输出

img

调试发现是有数据的,但是test只显示运行成功,就没反应了

img

如果是用main方法的话,就有输出,按网上说的加了参数,也没用,方法名和文件名都是规范的

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-15 17:06
    关注

    引自免费微信小程序:皆我百晓生

    针对你描述的问题,即在使用JUnit进行单元测试时,虽然测试方法执行成功,但控制台没有打印出期望的输出信息,这通常与测试框架如何处理系统输出有关。JUnit默认会捕获并重定向System.outSystem.err的输出,这可能是你观察不到输出的原因。

    为了解决这个问题,可以尝试以下几种方法:

    方法一:使用PrintStream重定向

    在测试类中,使用PrintStream将输出重定向到JUnit的输出流中。这样,即使JUnit捕获了输出,你也能在测试结果中看到它。示例如下:

    import org.junit.jupiter.api.Test;
    import java.io.PrintStream;
    
    class MyTest {
        private final PrintStream standardOut = System.out;
    
        @Test
        public void queryPriceByIdTest() {
            // 保存当前的System.out
            PrintStream savedStandardOut = System.out;
    
            // 创建一个ByteArrayOutputStream来捕获输出
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            PrintStream printStream = new PrintStream(outputStream);
            
            // 将System.out设置为我们创建的PrintStream
            System.setOut(printStream);
    
            // 进行测试操作
            ApplicationContext ioc = new ClassPathXmlApplicationContext("tx_ioc.xml");
            GoodsDao goodsDao = ioc.getBean("goodsDao", GoodsDao.class);
            Float price = goodsDao.queryPriceById(1);
            System.out.println(price);
    
            // 恢复原始的System.out
            System.setOut(savedStandardOut);
    
            // 断言输出是否正确
            String output = outputStream.toString().trim();
            assertEquals("10.0", output);
        }
    }
    

    方法二:使用断言检查输出

    另一种方法是在测试中使用断言来检查预期的输出。这通常涉及使用assertThatassertEquals等断言方法来验证输出是否符合预期,而不是依赖于控制台输出。

    方法三:配置JUnit的输出

    确保你的JUnit配置允许控制台输出。在某些IDE(如IntelliJ IDEA)中,你需要在运行配置中设置相应的选项来允许控制台输出。

    方法四:使用@TestOutput注解(如果使用的是JUnit 5)

    如果你使用的是JUnit 5,可以考虑使用@TestOutput注解来控制测试的输出。然而,在当前版本的JUnit 5中,并没有直接的@TestOutput注解,但你可以使用@ExtendWith结合自定义的监听器来达到类似的效果。

    以上方法中,推荐优先尝试方法一方法二,因为它们不需要额外的配置,并且能直接在测试代码中实现输出的检查和验证。如果问题仍然存在,可能需要进一步检查项目配置或IDE设置,确保没有其他因素干扰控制台输出。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月26日
  • 修改了问题 6月15日
  • 创建了问题 6月15日

悬赏问题

  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥20 python忆阻器数字识别
  • ¥15 高通uboot 打印ubi init err 22