Verifying the system integrity

Integration tests let us find bugs that unit testing couldn't catch. We have unit tested the JDBC API usages in isolation from the database, but we need to test the integration of data and data access API, such as the JDBC driver, connection, and rollback. In this section, we'll test the data access layer with a database.

We need to create the database table before we start writing tests. Download the code from the Packt Publishing website and import the project DatabaseAccess in your Eclipse workspace, go to the com.packt.database.util package and run the DatabaseManager class. It will create the table. The following is the fairly simple table creation code:

    conn = DriverManager.getConnection(url, props);
    conn.setAutoCommit(false);
    statement = conn.createStatement();
    statement.execute("create table PhoneBook      (num varchar(50), fname varchar(40),lname varchar(40))");
    conn.commit();

The following are the steps to test the JDBC code:

  1. Create a source folder named integration for the database centric tests, such as src or test.
  2. Create a new JUnit test named PhoneBookDerbyJdbcDaoIntegrationTest and add the following lines to test the create, search, update, and delete functionalities:
    public class PhoneBookDerbyJdbcDaoIntegrationTest {
      PhoneBookDerbyDao jdbcDao;
     
      @Before
      public void init() {
        jdbcDao = new PhoneBookDerbyDao();
      }
      
      @Test
      public void integration() throws Exception {
        PhoneEntry entry = new PhoneEntry();
        entry.setFirstName("john");
        entry.setLastName("smith");
        entry.setPhoneNumber("12345");
        
        assertTrue(jdbcDao.create(entry));
        List<PhoneEntry> phoneEntries = 
        jdbcDao.searchByFirstName("john");
    
        //verify create
        assertFalse(phoneEntries.isEmpty());
    
        //modify last name
        entry.setLastName("doe");
    
        //update
        assertTrue(jdbcDao.update(entry));
    
        //retrieve
        phoneEntries = jdbcDao.searchByFirstName("john");
    
        //verify update
        assertFalse(phoneEntries.isEmpty());
        assertEquals("doe", phoneEntries.get(0).getLastName());
    
        //delete
        jdbcDao.delete(entry.getPhoneNumber());
    
        //retrieve
        phoneEntries = jdbcDao.searchByFirstName("john");
    
        //verify delete
        assertTrue(phoneEntries.isEmpty());
      }
    
    }

The integration test creates a PhoneBookDerbyJdbcDao instance and calls the PhoneBookDerbyJdbcDao method to assert results.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset