调试发现是有数据的,但是test只显示运行成功,就没反应了
如果是用main方法的话,就有输出,按网上说的加了参数,也没用,方法名和文件名都是规范的
调试发现是有数据的,但是test只显示运行成功,就没反应了
如果是用main方法的话,就有输出,按网上说的加了参数,也没用,方法名和文件名都是规范的
引自免费微信小程序:皆我百晓生
针对你描述的问题,即在使用JUnit进行单元测试时,虽然测试方法执行成功,但控制台没有打印出期望的输出信息,这通常与测试框架如何处理系统输出有关。JUnit默认会捕获并重定向System.out
和System.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);
}
}
另一种方法是在测试中使用断言来检查预期的输出。这通常涉及使用assertThat
或assertEquals
等断言方法来验证输出是否符合预期,而不是依赖于控制台输出。
确保你的JUnit配置允许控制台输出。在某些IDE(如IntelliJ IDEA)中,你需要在运行配置中设置相应的选项来允许控制台输出。
@TestOutput
注解(如果使用的是JUnit 5)如果你使用的是JUnit 5,可以考虑使用@TestOutput
注解来控制测试的输出。然而,在当前版本的JUnit 5中,并没有直接的@TestOutput
注解,但你可以使用@ExtendWith
结合自定义的监听器来达到类似的效果。
以上方法中,推荐优先尝试方法一或方法二,因为它们不需要额外的配置,并且能直接在测试代码中实现输出的检查和验证。如果问题仍然存在,可能需要进一步检查项目配置或IDE设置,确保没有其他因素干扰控制台输出。