web-dev-qa-db-fra.com

System.out.print () ne montre rien dans les méthodes de test

J'essaie d'imprimer certaines données avec System.out dans mes tests unitaires (@Test mehotds), mais rien ne s'affiche. Cependant, cela fonctionne correctement dans la méthode @Before. J'utilise JUnit avec le plugin Maven Surefire.

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 configuration:

<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>

Merci.

15
Héctor

Utilisez Log

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

ou System.setOut ()

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

Couru dans cela aussi. J'utilise gradle pour gérer mes tâches et je l'insère à la fin du fichier build.gradle:

test {
  testLogging.showStandardStreams = true
}

Maintenant, je vois System.out.println(whateves).

28
Patrick

Pour obtenir la sortie de vos tests écrits via System.out.println, vous devez configurer maven-surefire-plugin afin de rediriger cette sortie vers un fichier pouvant être obtenu à l'aide des éléments suivants:

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

L'option redirectTestOutputToFile redirige la sortie de System.out.println etc. dans un fichier créé séparément: 

Extrait de la documentation:

Définissez ce paramètre sur "true" pour rediriger la sortie standard du test unitaire vers un fichier (trouvé dans reportsDirectory/testName-output.txt).

En dehors de cela, un System.out.println n'a pas de sens dans un test unitaire en général.

9
khmarbaise

Le problème est le nom de votre classe de test. Pour être reconnu dans la phase de test au sein de la construction (par le plugin Maven surefire), il doit être nommé "* Test":

Inclusions et exclusions de tests

2
gclaussn

J'ai fait un petit tour en classe séparée. Ce n’est pas aussi facile que d’enregistrer, mais vous pouvez utiliser cette solution si vous recherchez une solution rapide dans Spring Boot.

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(...);
    }
}

édité: en utilisant la méthode statique, pas besoin d'utiliser @Autowired.

1
Dev Man

Cela me semble familier, alors je suppose que vous exécutez vos tests à partir de certains IDE (Netbeans?). Il se peut que cela ne montre que la sortie pour les tests que fail . Cela se produit-il également lors de l'exécution du test à partir de la console?

Vous pourriez avoir plus de chance en utilisant System.err au lieu de System.out, mais je ne suis pas sûr à ce sujet.

0
Waldheinz