[ 
https://issues.apache.org/jira/browse/SUREFIRE-2147?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Geoff Soutter updated SUREFIRE-2147:
------------------------------------
    Summary: Report for JUnit5 DynamicContainer/DynamicTest doesn't preserve 
the hierarchical structure  (was: Report for JUnit5 
DynamicContainer/DynamicTest doesn't preserve the nested structure)

> Report for JUnit5 DynamicContainer/DynamicTest doesn't preserve the 
> hierarchical structure
> ------------------------------------------------------------------------------------------
>
>                 Key: SUREFIRE-2147
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-2147
>             Project: Maven Surefire
>          Issue Type: Bug
>            Reporter: Geoff Soutter
>            Priority: Major
>
> h3. Description of the issue
> I created a simple example of JUnit5 DynamicContainer/DynamicTest
> {code:java}
> package samplepackage;
> ...
> public class SampleTest {
>     @TestFactory
>     Collection<DynamicContainer> createDynamicTests() {
>         List<DynamicTest> testList = new ArrayList<>();
>         testList.add(DynamicTest.dynamicTest("test1", new MyExecutable()));
>         testList.add(DynamicTest.dynamicTest("test2", new MyExecutable()));
>         List<DynamicContainer> root = new ArrayList<>();
>         root.add(DynamicContainer.dynamicContainer("aFolder", testList));
>         return root;
>     }
>     private static class MyExecutable implements Executable {
>         @Override
>         public void execute() throws Throwable {
>         }
>     }
> }
> {code}
> When I run this in IDEA. I get the following structure
>  * SampleTest
>  ** createDynamicTests()
>  *** aFolder
>  **** test1
>  **** test2
> Here we can see that dynamic tests are represented by IDEA as nested children 
> of the test method. We can open and close the "virtual packages" created as 
> usual to explore in the dynamically created test results. It is not a "flat 
> list".
> Using surefire 3.0.0-m7, with the example "phrased" reporter configuration 
> enabled, it creates contents in surefire-reports like so:
> {code:java}
>   <testcase name="aFolder createDynamicTests() test1" 
> classname="samplepackage.SampleTest" time="0.02"/>
>   <testcase name="aFolder createDynamicTests() test2" 
> classname="samplepackage.SampleTest" time="0.001"/>
> {code}
> Here all the nested synthetic tests are created as the child of a single 
> class in the HTML report. The folder name is injected into the "method" name. 
> That is, from a reporting perspective, they are created as a flat list.
> This doesn't scale nicely as the number of tests in the dynamically created 
> "folder" structure grows. We can't view the different DynamicContainers 
> separately in the rendered HTML reports. We can't get a breakdown on any 
> particular DynamicContainer in the rendered HTML reports.
> h3. Solution Ideas
> I think what we want here is that dynamic tests using dynamic containers 
> should have those container names structured as synthetic packages. This 
> allows us the benefits of having the nested structure modelled correctly in 
> the HTML report. 
> That is, when mapping from DynamicTests to Java packages, we have:
> || Java Structure || Dynamic Test Structure ||
> | package identifier | DynamicContainer name |
> | simple class name | static placeholder (e.g. Test) |
> | method name | DynamicTest name |
>   
> I think we could do that by moving the method name and folder name from name= 
> into classname= and adding a static placeholder for the classname.
> {code:java}
>   <testcase name="test1" 
> classname="samplepackage.SampleTest.createDynamicTests().aFolder.Test" 
> time="0.02"/>
>   <testcase name="test2" 
> classname="samplepackage.SampleTest.createDynamicTests().aFolder.Test" 
> time="0.001"/>
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to