JUnit测试中的SystemOutRule没有捕获标准输出 [英] SystemOutRule in JUnit test didn't capture standard output

查看:1368
本文介绍了JUnit测试中的SystemOutRule没有捕获标准输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想测试 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆