web-dev-qa-db-ja.com

System.out.print()はテストメソッドに何も表示しません

ユニットテスト(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>

ありがとう。

20
Héctor

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;
3
Jordi Castilla

これにも走りました。私はgradleを使用してタスクを管理しており、これを_build.gradle_ファイルで終わりに配置します:

_test {
  testLogging.showStandardStreams = true
}
_

System.out.println(whateves)が表示されます。

31
Patrick

書き込まれたテストの出力を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は一般に単体テストでは意味がありません。

9
khmarbaise

問題は、テストクラスの名前です。ビルド内のテストフェーズで(Maven surefireプラグインによって)認識されるには、「* Test」という名前を付ける必要があります。

テストの包含と除外

2
gclaussn

これは私には馴染みがあるように聞こえるので、IDE(Netbeans?))からテストを実行していると仮定します。fail。これは、コンソールからテストを実行するときにも発生しますか?

System.err の代わりに System.out、しかしこれについてはよくわかりません。

1
Waldheinz

別の非テストクラスでちょっとしたトリックを作りました。ロガーほどスムーズではありませんが、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を使用する必要はありません。

1
Dev Man

gradleを使用しています。 System.outJava.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
  }
}

それらの両方を修正しました。

0
Abdollah