001package edu.pdx.cs.joy.junit;
002
003import org.junit.jupiter.api.AfterAll;
004import org.junit.jupiter.api.BeforeAll;
005import org.junit.jupiter.api.DynamicTest;
006import org.junit.jupiter.api.TestFactory;
007
008import java.util.Arrays;
009import java.util.List;
010import java.util.stream.Stream;
011
012import static org.junit.jupiter.api.Assertions.assertNotNull;
013import static org.junit.jupiter.api.DynamicTest.dynamicTest;
014
015
016/**
017 * The class demonstrates how JUnit 5's {@link DynamicTest} class can be used to generate test cases
018 * dynamically.
019 */
020public class AutomaticallyGeneratedTest
021{
022    @BeforeAll
023    public static void setUp() {
024        System.out.println("BeforeClass");
025    }
026
027    @AfterAll
028    public static void tearDown() {
029        System.out.println("AfterClass");
030    }
031
032    @TestFactory
033    Stream<DynamicTest> generateDynamicTests() {
034        return getTestNames().stream().map(name -> dynamicTest(name, () -> new GeneratedTest(name)));
035    }
036
037    public static List<String> getTestNames() {
038        return Arrays.asList( "One", "Two", "Three" );
039    }
040
041    public static class GeneratedTest
042    {
043        private final String name;
044
045        public GeneratedTest(String name) {
046            this.name = name;
047        }
048
049        public String getName() {
050            return name;
051        }
052
053        public void run()
054        {
055            assertNotNull(getName());
056            // assertEquals( 3, getName().length() );
057        }
058    }
059
060}