JUnit测试中的SystemOutRule没有捕获标准输出 [英] SystemOutRule in JUnit test didn't capture standard output
问题描述
我想测试 ClientDtoServiceConsoleImpl.displayAllClientsInfo()
方法。它只是将一些数据输出到控制台。
我试图通过
displayAllClientsInfo(List< ClientDTO> clients)
大约以下结构:
for(ClientDTO客户端:客户端) ){
System.out.println(client.getName());
列表< AccountDTO> accounts = client.getAccounts();
for(AccountDTO账户:账户){
System.out.println(account.getLogin());
}
}
当我通过 System.setOut(new PrintStream(outputStream))
手动更改系统输出,然后用于测试 outputStream.toString()
- 测试效果很好。
控制台输出开始:
客户账户
------------------------------- -------------------------------------------------- -------------------------------------------------- ---------
id电子邮件名称| id创建登录密码
========================================== ================================================== ================================================
1 client@example.com John Smith |
| 10 2017-05-25T12:59 JSmith1 zzwvp0d9
| 20 2016-01-05T18:32 JSmith2 mhjnbgfv
| 30 2015-11-10T11:29 JSmith3 ytersds1
------------------------------------ -------------------------------------------------- -------------------------------------------------- ----
2 jack@example.com Jack Black |
---------------------------------------------- -------------------------------------------------- --------------------------------------------
org.opentest4j.AssertionFailedError:
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:48)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue。 java:54)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:33)
at org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:110)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.lambda $ displayAllClientsInfo $ 0(ClientDtoServiceConsoleImplTest.java:73)
at org.junit.jupiter.api.AssertAll.lambda $ assertAll $ 0(AssertAll.java: 57)java.util.Spliterators的
$ ArraySpliterator.forEachRemaining(Spliterators.java:948)java.util.stream.ReferencePipeline上的
$ Head.forEach(ReferencePipeline.java:580)
在org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:55)
at org.junit。 jupiter.api.AssertAll.assertAll(AssertAll.java:44)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:38)
at org.junit.jupiter.api。 Assertions.assertAll(Assertions.java:1039)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.displayAllClientsInfo(ClientDtoServiceConsoleImplTest.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method。调用(Method.java:498)
org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
at org.junit.jupiter.engine.execution.ExecutableInvoker。调用(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda $ invokeTestMethod $ 6(TestMethodTestDescriptor.java:167)
at o rg.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $执行$ 3(HierarchicalTestExecutor.java:83)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java: 66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $ null $ 2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps $ Fo rEachOp $ OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline $ 2 $ 1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator。 java:116)
at java.util.Spliterators $ IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps $ ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream .ForEachOps $ ForEachOp $ OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach (ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $执行$ 3(HierarchicalTestExecutor.java:92)
org.junit.platform.engine。 support.hierar chical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform。 engine.support.hierarchical.HierarchicalTestExecutor.lambda $ null $ 2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.accept(ForEachOps.java:184)
at java .util.stream.ReferencePipeline $ 2 $ 1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators $ IteratorSpliterator.forEachRemaining (Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps $ ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.evaluateSequential(ForEa chOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $执行$ 3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor) .java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor .execute(HierarchicalTestExecutor.java:51)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher.core .DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:62)
at com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
org.opentest4j.AssertionFailedError:
at org.junit。 jupiter.api.AssertionUtils.fail(AssertionUtils.java:48)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:54)
at org.junit.jupiter.api。 AssertTrue.assertTrue(AssertTrue.java:33)
at org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:110)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.lambda $ displayAllClientsInfo $ 1(ClientDtoServiceConsoleImplTest.java:74)
at org.junit.jupiter.api.AssertAll.lambda $ assertAll $ 0(AssertAll.java:57)
at java.util.Spliterators $ ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.ReferencePipeline $ Head.forEach(ReferencePipeline.java:580)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:55)
at org.junit .jupiter.api.AssertAll.assertAll(AssertAll.java:44)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:38)
at org.junit.jupiter.api .Assertions.assertAll(Assertions.java:1039)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.displayAllClientsInfo(ClientDtoServiceConsoleImplTest.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method .invoke(方法。 java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker。 java:115)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda $ invokeTestMethod $ 6(TestMethodTestDescriptor.java:167)
at org.junit.jupiter.engine.execution.ThrowableCollector.execute (ThrowableCollector.java:40)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute (TestMethodTestDescriptor.java:110)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor .lambda $执行$ 3(HierarchicalTestExecutor.java:83)
at org.junit.platform.engine.support.hierarchical.Singl eTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine。 support.hierarchical.HierarchicalTestExecutor.lambda $ null $ 2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.accept(ForEachOps.java:184)
at java.util .stream.ReferencePipeline $ 2 $ 1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators $ IteratorSpliterator.forEachRemaining(Spliterators .java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps $ ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.evaluateSequential(ForEachOps.java:1 74)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org .junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $执行$ 3(HierarchicalTestExecutor.java:92)
org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66 )
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $ null $ 2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline $ 2 $ 1.accept( ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators $ IteratorSpliterator.forEachRemaining(Spliterat ors.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps $ ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine .support.hierarchical.HierarchicalTestExecutor.lambda $执行$ 3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecuto r.execute(HierarchicalTestExecutor.java:51)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher。 core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher。 core.DefaultLauncher.execute(DefaultLauncher.java:90)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:62)
at com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit。 JUnitStarter.main(JUnitStarter.java:70)
org.opentest4j.AssertionFailedError:
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:48) )org的
.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:54)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:33)
at org.junit.jupiter .api.Assertions.assertTrue(Assertions.java:110)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.lambda $ displayAllClientsInfo $ 2(ClientDtoServiceConsoleImplTest.java:75)
at org.junit.jupiter。 api.AssertAll.lambda $ assertAll $ 0(AssertAll.java:57)
at java.util.Spliterators $ ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.ReferencePipeline $ Head .forEach(ReferencePipeline.java:580)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:55)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll) .java:44)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:38)
at org.junit.jupiter.api.Assertions.assertAll(Assertions.java:1039 )com.example.services.dto.ClientDtoServiceConsoleImplTest.displayAllClientsI
nfo(ClientDtoServiceConsoleImplTest.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun。 reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils。 invokeMethod(ReflectionUtils.java:389)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor。 lambda $ invokeTestMethod $ 6(TestMethodTestDescriptor.java:167)
at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
at org.junit.jupiter.engine.descriptor .TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.e xecute(TestMethodTestDescriptor.java:110)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
at org.junit.platform.engine.support.hierarchical。 HierarchicalTestExecutor.lambda $执行$ 3(HierarchicalTestExecutor.java:83)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform .engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $ null $ 2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline $ 2 $ 1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)java.util.Spliterators的
$ IteratorSpliterator.forEachRemaining(Spliterators.java:180) 1)
在java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
在java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
在java .util.stream.ForEachOps $ ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.evaluateSequential(ForEachOps.java:174)
at java.util .stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical .HierarchicalTestExecutor.lambda $执行$ 3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit。 platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $ nul l $ 2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline $ 2 $ 1.accept (ReferencePipeline.java:175)java.util.Iterator.forEachRemaining的
(Iterator.java:116)java.util.Spliterators的
$ IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream。 ForEachOps $ ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps $ ForEachOp $ OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline。评估(AbstractPipeline.java:234)
在java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda $执行$ 3(Hierar chicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical。 HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
at org.junit.platform.engine。 support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform。 launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at com.intellij.junit5。在com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs(Ide aTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main( JUnitStarter.java:70)
规则来自JUnit 4个世界。在JUnit 5中(或更准确地说是JUnit Jupiter)静默忽略规则。 您需要分机
并使用 ExtendWith
注释测试类或方法。
<$ c $的作者c> SystemOutRule 打算将规则移植到扩展名。
更新:
扩展程序由JUnit 5核心提交者。
I want to test ClientDtoServiceConsoleImpl.displayAllClientsInfo()
method. It simply prints some data to console.
I tried to capture output in unit test by SystemOutRule
, but got empty String output
. Why?
package com.example.services.dto;
import com.example.dtos.AccountDTO;
import com.example.dtos.ClientDTO;
import org.junit.Rule;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertTrue;
class ClientDtoServiceConsoleImplTest {
@Rule
public final SystemOutRule systemOutput = new SystemOutRule().enableLog();
@SuppressWarnings("unchecked")
@Test
void displayAllClientsInfo() {
// Given
List<ClientDTO> clients = new ArrayList<>();
clients.add(new ClientDTO(1L, "John Smith", "client@example.com", Arrays.asList(
new AccountDTO(10L, 1L, "JSmith1","zzwvp0d9", LocalDateTime.of(2017,5,25,12,59) ),
new AccountDTO(20L, 1L, "JSmith2","mhjnbgfv", LocalDateTime.of(2016,1,5,18,32) ),
new AccountDTO(30L, 1L, "JSmith3","ytersds1", LocalDateTime.of(2015,11,10,11,29) )
)));
clients.add(new ClientDTO(2L, "Jack Black", "jack@example.com", new ArrayList<>()));
ClientDtoService clientDtoService = new ClientDtoServiceConsoleImpl();
// When
clientDtoService.displayAllClientsInfo(clients);
// Then
String output = systemOutput.getLog();
assertAll(
// Client
() -> assertTrue(output.contains(Long.toString(1))),
() -> assertTrue(output.contains("client@example.com")),
() -> assertTrue(output.contains("John Smith")),
// Accounts
() -> assertTrue(output.contains(Long.toString(10))),
() -> assertTrue(output.contains("JSmith1")),
() -> assertTrue(output.contains("zzwvp0d9")),
() -> assertTrue(output.contains(LocalDateTime.of(2017,5,25,12,59).toString())),
() -> assertTrue(output.contains(Long.toString(20))),
() -> assertTrue(output.contains("JSmith2")),
() -> assertTrue(output.contains("mhjnbgfv")),
() -> assertTrue(output.contains(LocalDateTime.of(2016,1,5,18,32).toString())),
() -> assertTrue(output.contains(Long.toString(30))),
() -> assertTrue(output.contains("JSmith3")),
() -> assertTrue(output.contains("ytersds1")),
() -> assertTrue(output.contains(LocalDateTime.of(2015,11,10,11,29).toString())),
// Client
() -> assertTrue(output.contains(Long.toString(2))),
() -> assertTrue(output.contains("jack@example.com")),
() -> assertTrue(output.contains("Jack Black"))
);
}
}
displayAllClientsInfo(List<ClientDTO> clients)
has approximately the following structure:
for (ClientDTO client : clients) {
System.out.println(client.getName());
List<AccountDTO> accounts = client.getAccounts();
for (AccountDTO account : accounts){
System.out.println(account.getLogin());
}
}
When I manually change system output by System.setOut(new PrintStream(outputStream))
and then use for testing outputStream.toString()
— test works good.
Begin of console output:
Clients Accounts
--------------------------------------------------------------------------------------------------------------------------------------------
id e-mail name | id created login password
============================================================================================================================================
1 client@example.com John Smith |
| 10 2017-05-25T12:59 JSmith1 zzwvp0d9
| 20 2016-01-05T18:32 JSmith2 mhjnbgfv
| 30 2015-11-10T11:29 JSmith3 ytersds1
--------------------------------------------------------------------------------------------------------------------------------------------
2 jack@example.com Jack Black |
--------------------------------------------------------------------------------------------------------------------------------------------
org.opentest4j.AssertionFailedError:
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:48)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:54)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:33)
at org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:110)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.lambda$displayAllClientsInfo$0(ClientDtoServiceConsoleImplTest.java:73)
at org.junit.jupiter.api.AssertAll.lambda$assertAll$0(AssertAll.java:57)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:55)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:44)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:38)
at org.junit.jupiter.api.Assertions.assertAll(Assertions.java:1039)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.displayAllClientsInfo(ClientDtoServiceConsoleImplTest.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167)
at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:62)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
org.opentest4j.AssertionFailedError:
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:48)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:54)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:33)
at org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:110)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.lambda$displayAllClientsInfo$1(ClientDtoServiceConsoleImplTest.java:74)
at org.junit.jupiter.api.AssertAll.lambda$assertAll$0(AssertAll.java:57)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:55)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:44)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:38)
at org.junit.jupiter.api.Assertions.assertAll(Assertions.java:1039)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.displayAllClientsInfo(ClientDtoServiceConsoleImplTest.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167)
at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:62)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
org.opentest4j.AssertionFailedError:
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:48)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:54)
at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:33)
at org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:110)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.lambda$displayAllClientsInfo$2(ClientDtoServiceConsoleImplTest.java:75)
at org.junit.jupiter.api.AssertAll.lambda$assertAll$0(AssertAll.java:57)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:55)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:44)
at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:38)
at org.junit.jupiter.api.Assertions.assertAll(Assertions.java:1039)
at com.example.services.dto.ClientDtoServiceConsoleImplTest.displayAllClientsInfo(ClientDtoServiceConsoleImplTest.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167)
at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:62)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Rules are from the JUnit 4 world. In JUnit 5 (or to be more precise JUnit Jupiter) Rules are silently ignored. You need an Extension
and annotate the test class or method with ExtendWith
.
The author of the SystemOutRule
intends to port the rule to an extension.
Update:
There is an extension by a JUnit 5 core commiter.
这篇关于JUnit测试中的SystemOutRule没有捕获标准输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!