>From a user perspective it would be nice if it is possible to use
Junit 5 also for integration tests using MiniClusterWithClientResource
[1].

I would be happy to help you with the migration of a few modules, if
you need a hand with it.

Regards,
Jörn

[1] 
https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/datastream/testing/#testing-flink-jobs

On Tue, May 25, 2021 at 10:33 AM Till Rohrmann <trohrm...@apache.org> wrote:
>
> Thanks for joining the discussion Qingsheng. In general, I am not opposed
> to upgrading our testing library to JUnit 5. Also, the idea of starting
> with individual modules and do it incrementally sounds reasonable.
>
> However, before starting to do it like this, the community should agree
> that we want to replace JUnit 4 with JUnit 5 eventually. This does not mean
> to rewrite all existing tests to use JUnit 5 but at least the default for
> all new tests should be JUnit 5 at some point. Otherwise, I fear that we
> will fragment the project into modules that use JUnit 5 and those that use
> JUnit 4. If this happens then it becomes harder for people to work on the
> code base because they always need to know which testing library to use in
> which module.
>
> Cheers,
> Till
>
> On Tue, May 25, 2021 at 8:53 AM Qingsheng Ren <renqs...@gmail.com> wrote:
>
> > Hi forks,
> >
> > I’d like to resume the discussion on migrating to JUnit 5. I’ve been
> > working on a connector testing framework and recently have an exploration
> > on JUnit 5. I think some features are very helpful for the development of
> > the testing framework:
> >
> > • Extensions
> >
> > JUnit 5 introduces a new Extension model, which provide a pluggable
> > mechanism for extending test classes, like managing test lifecycles and
> > providing parameters. Also with the help of extension, we can get rid of
> > some limitations introduced by class inheritance, like current TestLogger &
> > KafkaTestBase. In testing framework this is helpful for handling the
> > lifecycle of Flink cluster and external system.
> >
> > • Annotations
> >
> > JUnit 5 provides better support in annotations, working together with
> > extensions. We can simple mark types/fields/methods in the test, then let
> > extension to search these elements and manage their lifecycle in the test.
> > For example test with annotation @MiniCluster will be provided with a
> > lifecycle-managed MiniCluster automatically.
> >
> > • Parameterized tests
> >
> > JUnit 5 supports more powerful parameterized tests. Testing framework uses
> > this to inject different test environments and external contexts into the
> > same test case, to run the case under different scenarios.
> >
> > So I think JUnit 5 is quite flexible for developing such a framework or
> > test utility based on it. My suggestion is that we can take connector
> > testing framework as a starting point of using JUnit 5, then we can expand
> > our exploration to more modules, finally dive into the entire project.
> >
> > --
> > Best Regards,
> >
> > Qingsheng Ren
> > Email: renqs...@gmail.com
> > On Dec 1, 2020, 4:54 PM +0800, Khachatryan Roman , wrote:
> > > +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
> > > >
> >

Reply via email to