Java最高

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程

1.概述

当进行单元测试时,我们可能偶尔想要测试我们写入的消息标准输出通过System.out.println ()

虽然我们通常更喜欢一个日志框架在与标准输出的直接交互中,有时这是不可能的。

在这个快速教程中,我们将介绍几种可以进行单元测试的方法System.out.println ()使用JUnit

2.一种简单的打印方法

在本教程中,我们测试的重点将是写入标准输出流的简单方法:

private void print(String output) {System.out.println(output);}

快速提醒一下变量是一个public static final PrintStream对象,表示标准输出流适用于系统范围的使用。

3.使用核心Java

现在让我们看看如何编写一个单元测试来检查我们发送给println方法。然而,在我们编写实际的单元测试之前,我们需要在测试中提供一些初始化:

private final PrintStream standardOut = System.out;private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();@BeforeEach public void setUp(){系统。一套(新PrintStream (outputStreamCaptor));}

设置方法后,将标准输出流重新分配给newPrintStream与一个ByteArrayOutputStream。正如我们将要看到的那样,这个输出流就是现在输出值的地方:

@Test void givenSystemOutRedirection_whenInvokePrintln_thenOutputCaptorSuccess() {print("Hello B金宝搏188体育aeldung Readers!!");断言。一个ssertEquals("Hello Baeldung Readers!!", outputStreamCaptor.toString() .trim()); }

在我们调用打印方法,然后我们可以验证outputStreamCaptor包含我们所期望的内容。我们所说的修剪方法删除新行System.out.println ()补充道。

由于标准输出流是系统其他部分使用的共享静态资源,当我们的测试终止时,我们应该注意恢复它到原始状态:

@AfterEach public void tearDown() {System.setOut(standardOut);}

这确保我们在以后的其他测试中不会得到任何不想要的副作用。

4.使用系统规则

在本节中,我们将看一个名为系统规则哪个提供了一套JUnit规则的测试代码系统

让我们从添加依赖对我们的pom.xml:

<依赖> < groupId > com.github。stefanbirkner system-rules 1.19.0 test 

现在,我们可以继续使用SystemOutRule图书馆提供了:

@Rule public final SystemOutRule SystemOutRule = new SystemOutRule().enableLog();@Test public void givenSystemOutRule_whenInvokePrintln_thenLogSuccess() {print("Hello B金宝搏188体育aeldung Readers!!");断言。一个ssertEquals("Hello Baeldung Readers!!", systemOutRule.getLog() .trim()); }

很酷!使用SystemOutRule,我们可以拦截写入system . out首先,我们开始记录写入的所有内容system . out通过调用enableLog我们的规则上的方法。然后我们只需调用getLog让短信被发送到system . out因为我们叫做enableLog

该规则还包括一个方便的方法,该方法返回始终将行分隔符作为的日志\ n

断言。一个ssertEquals("Hello Baeldung Readers!!\n", systemOutRule.getLogWithNormalizedLineSeparator());

5.在JUnit5和Lambdas中使用系统规则

JUnit5,规则模型被扩展。幸运的是,上一节中介绍的System Rules库具有变异准备使用JUnit5。

系统Lambda可从Maven中央。我们可以把它添加到pom.xml:

<依赖> < groupId > com.github。stefanbirkner system-lambda 1.0.0 test 

现在让我们使用这个版本的库来实现我们的测试:

@Test void giventapsystemout_wheninvokeprintln_thenoutputisreturning dsuccessfully()抛出异常{String text = tapSystemOut(() -> {print("Hello Baeldung Read金宝搏188体育ers!!");});断言。一个ssertEquals("Hello Baeldung Readers!!", text.trim()); }

在这个版本中,我们利用tapSystemOut方法,该方法执行语句并让我们捕获传递给的内容system . out

6.结论

在本教程中,我们学习了几种用于测试的方法金宝搏官网188beSystem.out.println。在第一种方法中,我们看到了如何使用core Java重定向编写标准输出流的位置。

然后我们看到了如何使用一个很有前途的外部库System Rules,首先使用JUnit 4风格的规则,然后使用lambdas。

与往常一样,本文的完整源代码是可用的在GitHub

Java底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
2评论
最古老的
最新的
内联反馈
查看所有评论
对这篇文章的评论关闭!