Как мне указать JUnit (через Ant) перехватывать sdout и stderr для каждого теста в наборе тестов?Это вообще возможно?
Допустим, у меня есть простая задача Ant, которая запускает набор подробных тестов JUnit.
<target name="integration-tests" depends="init">
<property name="test.reports" value="${build.dir}/test-reports" />
<mkdir dir="${test.reports}" />
<junit showoutput="true" printsummary="yes" fork="yes">
<formatter type="xml" />
<classpath>
<pathelement path="${run.test.classpath}" />
</classpath>
<test name="org.example.IntegrationTestsTestSuite" todir="${test.reports}" />
</junit>
</target>
Когда CI (в моем случае Jenkins) вызывает эту цель,JUnit генерирует аккуратный XML-файл для дальнейшей обработки CI (публикация).К сожалению, все stdout и stderr объединены в значения двух элементов XML.
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="0" failures="0" hostname="foo-host" name="org.example.IntegrationTestsTestSuite" skipped="0" tests="3" time="0.115" timestamp="2018-06-06T11:45:45">
<properties>
<!-- all properties used by Ant build script here -->
</properties>
<testcase classname="org.example.integration.tests.CommonStuff" name="testSomeFooDoingAThing" time="0.088" />
<testcase classname="org.example.integration.tests.CommonStuff" name="testOtherFooDoingAThing" time="0.023" />
<testcase classname="org.example.integration.tests.CommonStuff" name="testAnotherFooDoingAThing" time="0.004" />
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
Если что-то пойдет не так с одним тестом, весь подробный вывод будет отображаться CI сразу, даже если это был успешный тест (когдапросмотр единственного неудачного теста), что исключает предполагаемую цель такого вывода.
Та же проблема существует, когда тесты выполняются в нашей среде IDE (Netbeans).Но я помню из других проектов, что, по крайней мере, IntelliJ смог показать такой подробный вывод за тест (хотя не уверен, применим ли он к наборам тестов).IntelliJ делает что-то еще для публикации / предварительной обработки вывода или это функция JUnit?