JUNIT test case for connection with database

你。 提交于 2019-12-21 06:15:11

问题


This is the code which im testing for JDBC connection

package com.sybase;


public class SybaseDBConnection {

    public static Properties prop = null;


    public static Connection getConnection(String databaseType) {

        Connection conn = null;
        // Properties prop = null;
        String database = null;
        String driver = null;
        String url = null;
        String user = null;
        String password = null;

        try {
            // prop = new Properties();
            // prop.load(SybaseDBConnection.class.getClassLoader()
            // .getResourceAsStream("com/properties/sybase.properties"));

            database = prop.getProperty("sybase." + databaseType
                    + ".databaseName");
            driver = prop.getProperty("sybase." + databaseType
                    + ".driverClassName");
            url = prop.getProperty("sybase." + databaseType + ".url");
            user = prop.getProperty("sybase." + databaseType + ".username");
            password = prop.getProperty("sybase." + databaseType + ".password");

            // String dbConUrl =
            // "jdbc:datadirect:sqlserver://nt64sl2003a.americas.progress.comsql2008;Port=1433;DatabaseName=test;User=test;Password=test;EnableBulkLoad=true;BulkLoadBatchSize="
            // + JDBC_BATCH_SIZE;

            String dbConUrl = url + SEMI_COLLAN + "DatabaseName=" + database
                    + SEMI_COLLAN + "User=" + user + SEMI_COLLAN + "Password="
                    + password + SEMI_COLLAN + "EnableBulkLoad=true"
                    + SEMI_COLLAN + "BulkLoadBatchSize=" + JDBC_BATCH_SIZE;

            System.out.println("The URL is : " + dbConUrl);

            SybDriver sybDriver = (SybDriver) Class.forName(driver)
                    .newInstance();
            sybDriver.setVersion(com.sybase.jdbcx.SybDriver.VERSION_6);
            DriverManager.registerDriver(sybDriver);
            conn = DriverManager.getConnection(dbConUrl);
        } catch (SQLException e) {
            System.err.println("Exception occured : SQLException : "
                    + e.getMessage());
            e.printStackTrace();
        } catch (InstantiationException e) {
            System.err.println("Exception occured : InstantiationException : "
                    + e.getMessage());
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            System.err.println("Exception occured : IllegalAccessException : "
                    + e.getMessage());
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.err.println("Exception occured : ClassNotFoundException : "
                    + e.getMessage());
            e.printStackTrace();
        }

        return conn;
    }

    public static void closeConnection(Connection conn) {
        try {
            if (null != conn) {
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();

        }
    }

    public static void closeResultset(ResultSet rs) {
        try {
            if (null != rs) {
                rs.close();
                rs = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();

        }
    }

    public static void closePreparedStatement(PreparedStatement pstmt) {
        try {
            if (null != pstmt) {
                pstmt.close();
                pstmt = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();

        }
    }

    public static void closeStatement(Statement stmt) {
        try {
            if (null != stmt) {
                stmt.close();
                stmt = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();

        }
    }

    public static String getProperty(String property) {
        return prop.getProperty(property);
    }

    public static void main(String args[]) {
        SybaseDBConnection.getConnection("ase");
    }

}

I have written this test Case

public class SybaseStatementTest {

    Connection conn;
    Statement stmt;

    // Setup methods
    @BeforeClass
    public void beforeClass() {
        conn = null;
        stmt = null;
    }

    // clean up method
    @AfterClass
    public void releaseResource() {
        if (stmt != null) {
            SybaseDBConnection.closeStatement(stmt);
        }
        if (conn != null) {
            SybaseDBConnection.closeConnection(conn);
        }
    }


    // Test case to check close statement using ASE database
    @Before
    public void openConnBeforerStmtTestASE() throws SQLException {
        conn = SybaseDBConnection.getConnection("ase");
        stmt = conn.createStatement();
    }

    @After
    public void closeConnAfterStmtTestASE() {
        if (conn != null) {
            SybaseDBConnection.closeConnection(conn);
        }
    }

    @Test
    public void testCloseStatementASE() {
        SybaseDBConnection.closeStatement(stmt);
        Assert.assertNull("Error occured", stmt);
    }
}

I am getting an Initialization error(@BeforeClass should be static) when I run this Junit test case. Please can you help?


回答1:


@BeforeClass and @AfterClass operate at the class level rather than on instances, so the methods need to be static.

You can remove the beforeClass method. It is not doing anything useful because the instance variables will default to null anyway. And also change @AfterClass to @After.

The test itself won't work because SybaseDBConnection.closeStatement is setting stmt to null but this is not visible outside the method because it's a local variable.

You can write the test like:

public class SybaseStatementTest {
    Connection connection;

    @Before
    public void before() {
        connection = SybaseDBConnection.getConnection("ase");
    }

    @After
    public void after() {
        SybaseDBConnection.closeConnection(connection);
    }

    @Test
    public void closeStatementShouldCloseStatement() {
        Statement statement = connection.createStatement();
        SybaseDBConnection.closeStatement(statement);
        assertTrue(statement.isClosed());
    }

    @Test
    public void closeStatementWithNullShouldNotThrow() {
        SybaseDBConnection.closeStatement(null);
    }
}


来源:https://stackoverflow.com/questions/22567843/junit-test-case-for-connection-with-database

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!