wake-up-neo.com

System.out.print () zeigt in Testmethoden nichts an

Ich versuche in meinen Unit-Tests (System.out mehotds) einige Daten mit @Test zu drucken, aber es wird nichts angezeigt. Es funktioniert jedoch einwandfrei in der @Before-Methode. Ich verwende JUnit mit dem Maven Surefire Plugin.

public class MyTests {

  @Before
  void init(){

    System.out.println("Initializing some data..."); // <- It works.

  }

  @Test
  void shouldRemoveSeries() {

    System.out.println("TEST: Should remove series"); // <- It doesn't.

  }
}

maven-surefire-plugin konfiguration:

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.15</version>
  <configuration>
    <includes>
      <include>**/*Tests.Java</include>
    </includes>
  </configuration>
</plugin>

Vielen Dank.

15
Héctor

Verwenden Sie Log

private static Logger log = Logger.getLogger(LoggingObject.class);
log.info("I'm starting");

oder System.setOut ()

private final PrintStream stdout = System.out;
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
private TerminalView terminalview;
2
Jordi Castilla

Ich bin auch in diese Sache gegangen. Ich verwende gradle zur Verwaltung meiner Aufgaben und füge dies am Ende von by build.gradle file ein:

test {
  testLogging.showStandardStreams = true
}

Jetzt sehe ich System.out.println(whateves).

28
Patrick

Um die Ausgabe Ihrer schriftlichen Tests über System.out.println zu erhalten, müssen Sie das maven-surefire-plugin so konfigurieren, dass diese Ausgabe in eine Datei umgeleitet wird. Dies kann folgendermaßen erreicht werden:

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.18.1</version>
  <configuration>
    <redirectTestOutputToFile>true</redirectTestOutputToFile>
  </configuration>
</plugin>

Die Option redirectTestOutputToFile leitet die Ausgabe von System.out.println usw. in eine Datei um, die separat erstellt wird: 

Auszug aus den Dokumenten:

Setzen Sie diesen Wert auf "true", um die Standardausgabe des Gerätetests in eine Datei umzuleiten (gefunden in reportsDirectory/testName-output.txt).

Ansonsten macht ein System.out.println im Allgemeinen im Komponententest keinen Sinn.

9
khmarbaise

Das Problem ist der Name Ihrer Testklasse. Um in der Testphase innerhalb des Builds (durch das Maven Surefire Plugin) erkannt zu werden, muss es "* Test" genannt werden:

Einschlüsse und Ausschlüsse von Tests

2
gclaussn

Ich habe einen kleinen Trick in einer separaten Testklasse gemacht. Es ist nicht so reibungslos wie ein Logger, aber wenn Sie nach einer schnellen Lösung in Spring Boot suchen, können Sie diese verwenden.

PrintForTest.Java 

import org.springframework.stereotype.Controller;

@Controller
public class PrintForTest {

    public static void print(String input){
        System.out.println(input);
    }
}

MainTest.Java

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.Assert;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class MainTest {

...

    @Test
    public void testingSomething(){
        PrintForTest.print("My new System.out.print()");
        Assert.assertEquals(...);
    }
}

bearbeitet: mit statischer Methode, keine Verwendung von @Autowired.

1
Dev Man

Das kommt mir bekannt vor, also gehe ich davon aus, dass Sie Ihre Tests von einigen IDE (Netbeans?) Ausführen. Es kann der Fall sein, dass nur die Ausgabe für Tests angezeigt wird, die fail zeigen. Tritt dies auch auf, wenn der Test von der Konsole aus ausgeführt wird?

Vielleicht haben Sie mehr Glück mit System.err anstelle von System.out, aber ich bin mir nicht sicher.

0
Waldheinz

Ich benutze gradle. Ich hatte dieses Problem mit beiden System.out und Java.util.logging.Logger. Ich habe den folgenden Teil meines build.gradle Datei:

test {
  testLogging {
    exceptionFormat = 'full'
    events = ["passed", "failed", "skipped"]
  }
}

und fügte hinzu, showStandardStreams = true unter testLogging. Das Ergebnis war wie folgt:

test {
  testLogging {
    exceptionFormat = 'full'
    events = ["passed", "failed", "skipped"]
    showStandardStreams = true
  }
}

Es hat beide behoben.

0
Abdollah