+1 for the migration (I agree with Dawid, for me the most important benefit is better support of parameterized tests).
Regards, Roman On Mon, Nov 30, 2020 at 9:42 PM Arvid Heise <ar...@ververica.com> wrote: > Hi Till, > > immediate benefit would be mostly nested tests for a better test structure > and new parameterized tests for less clutter (often test functionality is > split into parameterized test and non-parameterized test because of JUnit4 > limitation). Additionally, having Java8 lambdas to perform fine-grain > exception handling would make all related tests more readable (@Test only > allows one exception per test method, while in reality we often have more > exceptions / more fine grain assertions and need to resort to try-catch -- > yuck!). The extension mechanism would also make the mini cluster much > easier to use: we often have to start the cluster manually because of > test-specific configuration, which can be easily avoided in JUnit5. > > In the medium and long-term, I'd also like to use the modular > infrastructure and improved parallelization. The former would allow us > better to implement cross-cutting features like TestLogger (why do we need > to extend that manually in every test?). The latter is more relevant for > the next push on CI, which would be especially interesting with e2e being > available in Java. > > On Mon, Nov 30, 2020 at 2:07 PM Dawid Wysakowicz <dwysakow...@apache.org> > wrote: > > > Hi all, > > > > Just wanted to express my support for the idea. I did miss certain > > features of JUnit 5 already, an important one being much better support > > for parameterized tests. > > > > Best, > > > > Dawid > > > > On 30/11/2020 13:50, Arvid Heise wrote: > > > Hi Chesnay, > > > > > > The vintage runner supports the old annotations, so we don't have to > > change > > > them in the first step. > > > > > > The only thing that we need to change are all rules that do not extend > > > ExternalResource (e.g., TestWatcher used in TestLogger). This change > > needs > > > to be done swiftly as this affects the shared infrastructure as you > have > > > mentioned. > > > > > > Only afterwards, we start to actually migrate the individual tests. > That > > > can be done module by module or as we go. I actually found a nice > article > > > that leverages the migration assist of IntelliJ [1]. > > > > > > As the last stop, we remove the vintage runner - all JUnit4 tests have > > been > > > migrated and new tests cannot use old annotation etc. anymore. > > > > > > [1] > > > > > > https://blog.jetbrains.com/idea/2020/08/migrating-from-junit-4-to-junit-5/ > > > > > > On Mon, Nov 30, 2020 at 1:32 PM Chesnay Schepler <ches...@apache.org> > > wrote: > > > > > >> I presume we cannot do the migration module-wise due to shared test > > >> utilities that rely on JUnit interfaces? > > >> > > >> On 11/30/2020 1:30 PM, Chesnay Schepler wrote: > > >>> Is it feasible that 2 people can do the migration within a short > > >>> time-frame (say, a week)? > > >>> Must the migration of a test be done in one go, or can we for example > > >>> first rename all the Before/After annotations and then to the rest? > > >>> Are there any issues with other test dependencies (i.e., hamcrest, > > >>> powermock (PowerMockRunner), mockito) that we should be aware of? > > >>> > > >>> I generally like the idea of using JUnit 5, but am wary of this > > >>> migration dragging on for too long. > > >>> > > >>> On 11/27/2020 3:29 PM, Arvid Heise wrote: > > >>>> Dear devs, > > >>>> > > >>>> I'd like to start a discussion to migrate to a higher JUnit version. > > >>>> > > >>>> The main motivations are: > > >>>> - Making full use of Java 8 Lambdas for writing easier to read tests > > >>>> and a > > >>>> better performing way of composing failure messages. > > >>>> - Improved test structures with nested and dynamic tests. > > >>>> - Much better support for parameterized tests to avoid separating > > >>>> parameterized and non-parameterized parts into different test > classes. > > >>>> - Composable dependencies and better hooks for advanced use cases > > >>>> (TestLogger). > > >>>> - Better exception verification > > >>>> - More current infrastructure > > >>>> - Better parallelizable > > >>>> > > >>>> Why now? > > >>>> - JUnit5 is now mature enough to consider it for such a complex > > project > > >>>> - We are porting more and more e2e tests to JUnit and it would be a > > >>>> pity to > > >>>> do all the work twice (okay some already has been done and would > > >>>> result in > > >>>> adjustments, but the sooner we migrate, the less needs to be touched > > >>>> twice) > > >>>> > > >>>> Why JUnit5? > > >>>> There are other interesting alternatives, such as TestNG. I'm happy > > >>>> to hear > > >>>> specific alternatives. For now, I'd like to focus on JUnit4 for an > > >>>> easier > > >>>> migration path. > > >>>> > > >>>> Please discuss if you would also be interested in moving onward. To > > get > > >>>> some overview, I'd like to see some informal +1 for the options: > > >>>> > > >>>> [ ] Stick to JUnit4 for the time being > > >>>> [ ] Move to JUnit5 (see migration path below) > > >>>> [ ] Alternative idea + advantages over JUnit5 + some very rough > > >>>> migration > > >>>> path > > >>>> > > >>>> --- > > >>>> > > >>>> Migrating from JUnit4 to JUnit5 can be done in some steps, so that > we > > >>>> can > > >>>> gradually move from JUnit4 to JUnit5. > > >>>> > > >>>> 0. (There is a way to use JUnit4 + 5 at the same time in a project - > > >>>> you'd > > >>>> use a specific JUnit4 runner to execute JUnit5. I'd like to skip > this > > >>>> step > > >>>> as it would slow down migration significantly) > > >>>> 1. Use JUnit5 with vintage runner. JUnit4 tests run mostly out of > the > > >>>> box. > > >>>> The most important difference is that only 3 base rules are > supported > > >>>> and > > >>>> the remainder needs to be migrated. Luckily, most of our rules > derive > > >>>> from > > >>>> the supported ExternalResource. So in this step, we would need to > > >>>> migrate > > >>>> the rules. > > >>>> 2. Implement new tests in JUnit5. > > >>>> 3. Soft-migrate old tests in JUnit5. This is mostly a renaming of > > >>>> annotation (@Before -> @BeforeEach, etc.). Adjust parameterized > tests > > >>>> (~400), replace rule usages (~670) with extensions, exception > handling > > >>>> (~1600 tests), and timeouts (~200). This can be done on a test class > > by > > >>>> test class base and there is no hurry. > > >>>> 4. Remove vintage runner, once most tests are migrated by doing a > > final > > >>>> push for lesser used modules. > > >>>> > > >>>> Let me know what you think and I'm happy to answer all questions. > > >>>> > > >>> > > >> > > > > > > -- > > Arvid Heise | Senior Java Developer > > <https://www.ververica.com/> > > Follow us @VervericaData > > -- > > Join Flink Forward <https://flink-forward.org/> - The Apache Flink > Conference > > Stream Processing | Event Driven | Real Time > > -- > > Ververica GmbH | Invalidenstrasse 115, 10115 Berlin, Germany > > -- > Ververica GmbH > Registered at Amtsgericht Charlottenburg: HRB 158244 B > Managing Directors: Timothy Alexander Steinert, Yip Park Tung Jason, Ji > (Toni) Cheng >