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.
Utilisez Log
private static Logger log = Logger.getLogger(LoggingObject.class);
log.info("I'm starting");
private final PrintStream stdout = System.out;
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
private TerminalView terminalview;
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)
.
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.
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":
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.
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.