commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From GitBox <...@apache.org>
Subject [GitHub] [commons-csv] mureinik opened a new pull request #49: CSV-252: Upgrade to JUnit Jupiter
Date Sat, 05 Oct 2019 18:05:17 GMT
mureinik opened a new pull request #49: CSV-252: Upgrade to JUnit Jupiter
URL: https://github.com/apache/commons-csv/pull/49
 
 
   This PR upgrades the project's testing framework from JUnit 4.12 to the modern JUnit Jupiter
5.5.4.
   
   Since JUnit 5 Jupiter is not backwards compatible to JUnit 4.x (or even JUnit Vintage),
this patch is a bit large, even though a lot of the changes are merely cosmetic (such as changing
the argument order, see details below). In order to make the reviewer's task as easy as possible,
this PR does not presume to use JUnit Jupiter's best practices and all its new functionality,
but only to migrate the existing tests with as little change as possible. Following PRs may
want to improve the tests by using some of JUnit Jupiter's new features.
   
   This PR includes the following changes:
   
   1. Maven dependency changes:
        1. `junit:junit` was replaced with `org.junit.jupiter:junit-jupiter`.
        1. `org.hamcrest:hamcrest` was introduced as an explicit dependency, since the project
uses Hamcrest, and JUnit Jupiter does not bundle Hamcrest, unlike JUnit 4.x.
        1. The Mockito dependency was upgraded from `org.mockito.mockito-all:1.10.19` to `org.mockito:mockito-core:3.1.0`,
which supports JUnit Jupiter.
   
    1. Annotations:
         1. `org.junit.jupiter.api.Test` was used as a drop in replacement for `org.juit.Test`
without arguments. See 3.ii. for handling of `@Test` annotations with an `expected` argument.
        1. `org.junit.jupiter.api.BeforeEach` was used as a drop in replacement for `org.junit.Before`.
        1. `org.junit.jupiter.api.BeforeAll` was used as a drop in replacement for `org.junit.BeforeClass`.
        1. `org.junit.jupiter.api.Disabled` was used as a drop in replacement for `org.junit.Ignore`.
   
   1. Assertions:
        1. `org.junit.jupiter.api.Assertions`' methods were used as drop in replacements for
`org.junit.Assert`'s methods with the same name in the simple case of an assertion without
a message. In the case of an assertion with a message, `org.junit.jupiter.api.Assertions`'
methods were used, but the argument order was changed - `Assert`'s methods take the message
as the first argument, while `Assertions`' methods take the message as the last argument.
        1. `org.junit.jupiter.api.Assertions#assertThrows` was used to assert that a specific
exception was thrown instead of an `org.junit.Test` annotation with an `expected` argument.
This technique has a couple of side bonuses. First, it makes the tests slightly stricter,
as now they can assert the exception was thrown from a specific line and prevent false positives
where the test's "set-up" code accidentally threw that exception. Second, it clarifies that
some of the test code is unreachable (as a previous line already throws an exception), and
can safely be removed in order to clean up the test. The throws clauses of these methods were
cleaned up from exceptions that can no longer be thrown in order to avoid compilation warnings.
        1. `org.hamcrest.MatcherAssert#assertThat` was used as a drop in replacement for `org.junit.Assert#assertThat`.
        1. `org.junit.jupiter.api.Assertions#assertNull` was used as a drop in replacement
for `junit.framework.TestCase#assertNull`.
   
   1. Specific Changes:
        1. `CSVFileParserTest` was rewritten with JUnit Jupiter's `org.junit.jupiter.api.ParameterizedTest`.
 Unlike JUnit 4's `org.junit.runners.Parameterized`, it cannot be used to inject arguments
to a test's construct, and so the test can't be stateful. Instead, it was rewritten so every
test receives the file as a parameter, and opens a reader on it itself. As a side bonus, this
design makes it easier to close the reader and avoid leaving open file descriptors like the
original test did.
   
   
   Closes CSV-252

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

Mime
View raw message