I'm not sure. Maybe we could offer some kind of opt-in or opt-out for this
feature (jenkins plugin?). Maybe having an opt-out is cheaper than
validating the feature on a good number of CI tools.

My gut feel tells me that there are tools that won't support this new
format.

Cheers!


On Fri, Apr 19, 2013 at 4:55 PM, Luke Daley <luke.da...@gradleware.com>wrote:

>
> On 19/04/2013, at 3:34 PM, Szczepan Faber <szczepan.fa...@gradleware.com>
> wrote:
>
> > The schema for this file used to be somewhere in the web (I've found it
> some time ago when I needed it). However, it's probably more important to
> be compatible with most consumers (e.g. all/most CI servers).
>
> The fact that there is a schema doesn't really change anything, because it
> appears that no one respects it.
>
> > I think we should be very careful changing the format of the junit xml
> reports (e.g. test out integrations with other CIs, etc).
> >
> > I think it would be very useful if Gradle supported output per test.
>
> The only way to do that (that we've identified) is to change the XML file,
> so this statement appears in contention with your previous.
>
> Are you saying we should change it, but be careful in doing so? Or should
> not change it and need to find another way?
>
> >
> > Cheers!
> >
> >
> > On Fri, Apr 19, 2013 at 2:33 PM, Luke Daley <luke.da...@gradleware.com>
> wrote:
> > Hi all,
> >
> > In the “JUnit XML” file that we currently produce we do not associate
> output (std, err) with individual test cases, but with the suite (in
> practice: class) as a whole. This is causing problems in integrating with
> https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Attachments+Plugin.
> >
> > Given:
> >
> > package junit;
> >
> > import org.junit.Test;
> > import org.junit.runner.RunWith;
> > import org.junit.runners.JUnit4;
> >
> > @RunWith(JUnit4.class)
> > public class TheTest {
> >
> >     @Test
> >     public void t() {
> >         System.out.println("foo");
> >     }
> >
> > }
> >
> > We generate XML like:
> >
> > <?xml version="1.1" encoding="UTF-8"?>
> > <testsuite name="junit.TheTest" tests="1" failures="0" errors="0"
> timestamp="1970-01-01T00:00:00" hostname="hasdrubal.local"
> time="1.366372749405E9">
> >   <properties/>
> >   <testcase name="t" classname="junit.TheTest" time="0.001"/>
> >   <system-out><![CDATA[foo
> > ]]></system-out>
> >   <system-err><![CDATA[]]></system-err>
> > </testsuite>
> >
> > After digging through the Jenkins code for how it parses these files, I
> discovered that it supports:
> >
> > <?xml version="1.1" encoding="UTF-8"?>
> > <testsuite name="junit.TheTest" tests="1" failures="0" errors="0"
> timestamp="1970-01-01T00:00:00" hostname="hasdrubal.local"
> time="1.366372749405E9">
> >   <properties/>
> >   <testcase name="t" classname="junit.TheTest" time="0.001">
> >     <system-out><![CDATA[foo
> > ]]></system-out>
> >     <system-err><![CDATA[]]></system-err>
> >   </testcase>
> > </testsuite>
> >
> > That is, you can associate output with an individual testcase.
> >
> > I did some experiments with Maven to see what it does. Maven doesn't
> record any stdio information in the XML file usually; it puts text files on
> the side. However, I happened upon a case where it does. If you try and
> execute a non public class you get:
> >
> > <?xml version="1.0" encoding="UTF-8" ?>
> > <testsuite failures="0" time="0.006" errors="2" skipped="0" tests="2"
> name="junit.TheTest">
> >
> >   <testcase time="0.002" classname="junit.TheTest"
> name="initializationError">
> >     <error message="Test class should have exactly one public
> constructor" type="java.lang.Exception">java.lang.Exception: Test class
> should have exactly one public constructor
> >         at
> org.junit.runners.BlockJUnit4ClassRunner.validateOnlyOneConstructor(BlockJUnit4ClassRunner.java:131)
> >         …
> > </error>
> >     <system-out>@SLTests run: 3, Failures: 0, Errors: 0, Skipped: 0,
> Time elapsed: 0.033 sec
> > @SLRunning junit.TheTest
> > </system-out>
> >   </testcase>
> >   <testcase time="0.001" classname="junit.TheTest"
> name="initializationError">
> >     <error message="Class junit.TheTest should be public"
> type="java.lang.Exception">java.lang.Exception: Class junit.TheTest should
> be public
> >         at
> org.junit.runners.model.FrameworkMethod.validatePublicVoid(FrameworkMethod.java:87)
> >         …
> > </error>
> >   </testcase>
> > </testsuite>
> >
> > The <system-out> elements are nested under <testcase> there. So it seems
> there is some precedent for this.
> >
> >
> > I have some incentive to at least get this working for a client in
> Jenkins. Where "get it working" would be to have the <system-out> nested
> under <testcase> so it can do the correct association.
> >
> > I have no idea who else supports this format though. It's hard to
> predict given that there is no schema for this XML file.
> >
> > --
> > Luke Daley
> > Principal Engineer, Gradleware
> > http://gradleware.com
> >
> > Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara,
> CA: http://www.gradlesummit.com
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe from this list, please visit:
> >
> >     http://xircles.codehaus.org/manage_email
> >
> >
> >
> >
> >
> > --
> > Szczepan Faber
> > Principal engineer@gradleware; Lead@mockito
> > Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara,
> CA: http://www.gradlesummit.com
>
> --
> Luke Daley
> Principal Engineer, Gradleware
> http://gradleware.com
>
> Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA:
> http://www.gradlesummit.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>     http://xircles.codehaus.org/manage_email
>
>
>


-- 
Szczepan Faber
Principal engineer@gradleware; Lead@mockito
Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA:
http://www.gradlesummit.com

Reply via email to