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

Oleg Ignatenko updated IGNITE-10173:
------------------------------------
    Fix Version/s: 2.8

> Gradually move unit tests from Junit 3 to newer version
> -------------------------------------------------------
>
>                 Key: IGNITE-10173
>                 URL: https://issues.apache.org/jira/browse/IGNITE-10173
>             Project: Ignite
>          Issue Type: Task
>    Affects Versions: 2.6
>            Reporter: Oleg Ignatenko
>            Assignee: Oleg Ignatenko
>            Priority: Major
>              Labels: MakeTeamcityGreenAgain, technical_debt
>             Fix For: 2.8
>
>
> (i) Related dev list discussion: [Is it time to move forward to JUnit4 
> (5)?|http://apache-ignite-developers.2346864.n4.nabble.com/Is-it-time-to-move-forward-to-JUnit4-5-td29608.html]
> Currently unit tests in the project are mix of two versions Junit 3 and 4. 
> This makes it hard to develop and maintain. Making all tests use the same 
> version Junit is intended to address this problem.
> Another reason why migration to newer version is desirable is Junit 4 
> provides developer an option to conveniently mute tests by Ignore annotation 
> while with Junit 3 this could only be done by adding fail and manually muting 
> the test in Teamcity (the latter turned out to be extremely painful when I 
> had to do some things per IGNITE-9884).
> This task is to migrate all tests to single uniform version Junit 4 (with 
> further option to migrate to Junit 5, see also note below).
> The difficulty of migration is that too many tests depend on Junit3-based 
> [GridAbstractTest|https://github.com/apache/ignite/blob/master/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java]
>  and its subclasses so that making them all change in a single move would be 
> very tedious and risky. A way to work around this is to create a parallel 
> Junit-4 based "twin" of GridAbstractTest (tentative name 
> {{IgniteAbstractTest}}) and using is move to Junit 4 gradually, smoothly and 
> safely.
> Step by step plan of changes is below (made to sub-tasks under this 
> "umbrella" ticket):
>  # migrate examples tests from Junit 3 to 4
>  This is first task because examples are most publicly visible, relativelly 
> small and least risky part of unit tests in the project.
>  Steps: 1) create Junit-4 based twin of GridAbstractTest (and all needed 
> subclasses), 2) declare GridAbstractTest deprecated with reference to use 
> newer API instead 3) change unit tests in examples to use new API
>  # migrate core module tests from Junit 3 to 4
>  using new API introduced and tested at prior step
>  # migrate non-core modules tests from Junit 3 to 4
>  using new API introduced and tested at prior step
>  # cleanup Junit 3 from the project
>  1) remove deprecated API of GridAbstractTest and its subclasses 2) remove 
> dependencies from Junit 3 in Maven 3) migrate tests that were missed at prior 
> steps, if there are any
>  # change tests that fail("Ignite JIRA ticket URL") to @Ignore("Ignite JIRA 
> ticket URL")
>  Note this step would better be coordinated with Teamcity and TC bot 
> maintainers because it may substantially impact them
>  # Change new tests root to use @BeforeClass and @AfterClass instead of 
> isFirstTest() and isLastTest()
>  these homebrew methods seem to be in GridAbstractTest only because Junit 3 
> lacked necessary functionality; after migration to Junit 4 these would better 
> changed to use standard API of this framework.
>  # Investigate migration from Junit 4 to 5
>  Find out if Junit 5 is mature enough - specifically why maven still uses 
> Junit 4 as default, are there serious reasons for that or not. If it looks 
> okay, create a new JIRA task to migrate.
> ----
> Note on migrating to Junit 5. While preparing this task I considered an 
> option to migrate from Junit 3 to 5 instead of 4.
> I dropped that primarily because migration from Junit 3 requires quite a lot 
> of manual changes in the code (changing imports and adding annotations), as 
> opposed to migration from Junit 4 to 5 for which there seem to be options to 
> make most changes automatically (eg IntelliJ seem to provide such an option). 
> Because of that it looks more convenient to split it to separate steps, so 
> that after all tests in the project get to Junit 4 we could do an automated 
> migration to newer version.
> Another thing that made me prefer this way is that I wanted to avoid having 
> three different versions Junit in the project (3, 4, 5), even if that would 
> be temporarily (note that migration from Junit 3 is expected to be manual and 
> quite lengthy, so "temporarily" may mean quite a lot of time really).
> Also note that as pointed in above list of steps we better make some 
> preliminary assessment on whether time has really come to migrate to Junit 5.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to