ユニットテスト(System.out
mehotds)で@Test
を使用してデータを印刷しようとしていますが、何も表示されません。ただし、@Before
メソッドでは正常に機能します。 Maven SurefireプラグインでJUnitを使用しています。
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
設定:
<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>
ありがとう。
Log を使用します
private static Logger log = Logger.getLogger(LoggingObject.class);
log.info("I'm starting");
または System.setOut()
private final PrintStream stdout = System.out;
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
private TerminalView terminalview;
これにも走りました。私はgradleを使用してタスクを管理しており、これを_build.gradle
_ファイルで終わりに配置します:
_test {
testLogging.showStandardStreams = true
}
_
System.out.println(whateves)
が表示されます。
書き込まれたテストの出力をSystem.out.printlnを介して取得するには、maven-surefire-pluginを設定して、この出力をファイルにリダイレクトする必要があります。これは、以下を使用して実現できます。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
</configuration>
</plugin>
オプション redirectTestOutputToFile は、System.out.printlnなどの出力を個別に作成されるファイルにリダイレクトします。
ドキュメントからの抜粋:
これを「true」に設定して、単体テストの標準出力をファイル(reportsDirectory/testName-output.txtにあります)にリダイレクトします。
それとは別に、System.out.printlnは一般に単体テストでは意味がありません。
問題は、テストクラスの名前です。ビルド内のテストフェーズで(Maven surefireプラグインによって)認識されるには、「* Test」という名前を付ける必要があります。
これは私には馴染みがあるように聞こえるので、IDE(Netbeans?))からテストを実行していると仮定します。fail。これは、コンソールからテストを実行するときにも発生しますか?
System.err
の代わりに System.out
、しかしこれについてはよくわかりません。
別の非テストクラスでちょっとしたトリックを作りました。ロガーほどスムーズではありませんが、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(...);
}
}
編集:静的メソッドを使用し、@ Autowiredを使用する必要はありません。
gradle
を使用しています。 System.out
とJava.util.logging.Logger
の両方でこの問題が発生しました。 build.gradle
ファイルの次の部分を編集しました。
test {
testLogging {
exceptionFormat = 'full'
events = ["passed", "failed", "skipped"]
}
}
testLogging
の下にshowStandardStreams = true
を追加しました。結果は次のとおりです。
test {
testLogging {
exceptionFormat = 'full'
events = ["passed", "failed", "skipped"]
showStandardStreams = true
}
}
それらの両方を修正しました。