benthumb
benthumb

Reputation: 35

Junit5 and Maven: @BeforeAll initialization method not being called

I would appreciate any hints as to why @BeforeAll is skipped in the following Junit5 test suite. FYI, my output when I build with Maven:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

14:43:53.681 [main] DEBUG org.benthumb.db2_web_app.tests.CustomerDaoTest - creating test object...
Running org.benthumb.db2_web_app.tests.CustomerDaoTest

14:43:53.689 [main] DEBUG org.benthumb.db2_web_app.tests.CustomerDaoTest - test one executing...

14:43:53.696 [main] DEBUG org.benthumb.db2_web_app.tests.CustomerDaoTest - customer access object is null...
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec

public class CustomerDaoTest {

    private static CustomerDao cDao;
    private static Customer cust;
    private static Properties props;
    private final static String PROP_FILE_NAME = "customer.properties";
    private static InputStream is;
    final static Logger logger = LoggerFactory.getLogger(CustomerDaoTest.class);

    public CustomerDaoTest() {
        logger.debug("creating test object...");
        is = getClass().getClassLoader().getResourceAsStream(PROP_FILE_NAME);
    }

    @BeforeAll
    public static void initializeTestConditions() throws IOException {
        logger.debug("setting up customer access object...");
        props = new Properties();
        if (is != null) {
            props.load(is);
        } else {
            throw new FileNotFoundException("property file '" + PROP_FILE_NAME + "' not found in the classpath");
        }

        cust = new Customer(
                props.getProperty("id"),
                props.getProperty("businessName"),
                props.getProperty("jobTitle"),
                props.getProperty("firstName"),
                props.getProperty("address"),
                props.getProperty("address2"),
                "",
                props.getProperty("city"),
                props.getProperty("state"),
                props.getProperty("country"),
                props.getProperty("phone")
        );
        cDao = new CustomerDao();
        //conn = cDao.conn;
    }

    @Test
    public void testConnectionCustomerDao() throws SQLException {
        //Properties prop = conn.getClientInfo();
        //assertEquals("these two values are equal", prop, null);
        logger.debug("test one executing...");
        Assumptions.assumeTrue(1 == 1);
    }

    @Test
    public void testPersistCustomerDao() {
        if (cDao != null) {
            try {
                cDao.addCustomer(cust);
            } catch (SQLException ex) {
                logger.error(Marker.ANY_MARKER, null, ex.getErrorCode());
            }
        } else {
            logger.debug("customer access object is null...");
        }
        Assumptions.assumeTrue(1 == 1);
    }

}

Upvotes: 1

Views: 2124

Answers (2)

Easterwood
Easterwood

Reputation: 663

If you execute the unit tests with the maven lifecycle test the surefire plugin is used in the background. Depending on the version of the surefire plugin it supports different JUnit versions. Since surefire plugin version 3.0.0 JUnit 5 is supported out-of-the-box and no extra dependencies are necessary to execute JUnit 5 tests.

Prior version 3.0.0 it is necessary to add the junit-platform-runner and the @RunWith(JUnitPlatform.class) so the JUnit 5 tests are executed with the right JUnit engine.

Upvotes: 1

Danyal Sandeelo
Danyal Sandeelo

Reputation: 12391

Your class doesn't have @RunWith(JUnitPlatform.class) annotation. Add it and it will work fine.

Upvotes: 1

Related Questions