当前位置: 首页 > 面试题库 >

Java,Junit-捕获用于单元测试的标准输入/输出

廉展鹏
2023-03-14
问题内容

我正在使用JUnit编写集成测试,以自动化基于控制台的应用程序的测试。该应用程序是家庭作业,但这不是家庭作业。我想使这些测试自动化以提高生产率-
我不想回头再重新测试应用程序中已经测试过的部分。(使用单元测试的标准原因)

无论如何,我找不到或找不到有关捕获输出的文章,因此我不能这样做assertEquals,也不能提供自动输入。我不在乎输出/输入是否进入控制台/输出窗格。我只需要执行测试并验证输出是否与输入相同即可。

任何人都有文章或代码可以帮助您解决此问题。


问题答案:

使用System.setOut()(和System.setErr())将输出重定向到任意打印流-
您可以通过编程方式读取该打印流。

例如:

final ByteArrayOutputStream myOut = new ByteArrayOutputStream();
System.setOut(new PrintStream(myOut));

// test stuff here...

final String standardOutput = myOut.toString();


 类似资料:
  • 问题内容: 我正在调用在控制台/标准输出中打印一些字符串的函数。我需要捕获此字符串。我无法修改执行打印的功能,也无法通过继承更改运行时行为。我找不到任何允许我执行此操作的预定义方法。 JVM是否存储打印内容的缓冲区? 有谁知道可以帮助我的Java方法吗? 问题答案: 您可以使用写入字符串缓冲区的流临时替换System.err或System.out。

  • 问题内容: 在客户端计算机上遇到网络问题时,我希望能够运行一些命令行并将其结果通过电子邮件发送给我自己。 我发现Runtime.exec将允许我执行任意命令,但是将结果收集到String中会更有趣。 我意识到我可以将输出重定向到文件,然后从文件中读取,但是我的幻想是告诉我,有一种更优雅的方法。 有什么建议吗? 问题答案: 你需要在此过程中同时捕获标准输出和标准错误。然后,你可以将std写出到文件/

  • 回顾一下我们写的第一个 Rust 程序就是带副作用的,其副作用就是向标准输出(stdout),通常是终端或屏幕,输出了 Hello, World! 让屏幕上这几个字符的地方点亮起来。println! 宏是最常见的输出,用宏来做输出的还有 print!,两者都是向标准输出(stdout)输出,两者的区别也一眼就能看出。至于格式化输出,基础运算符和字符串格式化小节有详细说明,这里就不再啰嗦了。 更通用

  • 问题内容: 我只有一种方法。如何检查System.out.println()并将Scanner替换为使用JUnit自动输入值? PS,请提供一些解决方案… 问题答案: 理想情况下,提取尴尬的依赖关系,以便您可以在没有依赖关系的情况下进行测试。更改为简单: (考虑使用a 代替for 。) 然后,您实际上不需要进行单元测试-但您可以使用基于的进行测试,并基于的输出进行测试,从而提供所需的任何输入并检查

  • 问题内容: 我需要测试一些api。例如,我在类中有多个@Test方法来测试我的功能,在初始化之前,我先连接到服务的某些URL并使用它。 如果我的服务位于多个URL(不同的服务器环境),如何为不同的服务URL测试此功能? 流: 通过url初始化连接 运行所有测试 通过另一个URL初始化连接 运行所有测试(相同) … 当只有一位主持人时,我会这样: 问题答案: 有一天我发生了,他们发现了这个很棒的主意

  • 问题内容: 在出现以下情况时如何编写测试: 测试用户输入。 测试从文件读取的输入。 测试从环境变量读取的输入。 如果有人可以告诉我如何解决上述情况,那就太好了;如果您能指出一些我可以阅读的docs / articles / blog帖子,那还是很棒的。 问题答案: 您所描述的所有三种情况都需要专门解决,以确保在设计中使用松散耦合。 您是否 真的 需要对Python的方法进行单元测试?该方法? ?没