单元测试方法getPostLogonMessage()能够通过模仿loadAccountStatus()方法很容易地进行测试,不需要那种通过数据库的远程调用,每一个假设条件能够被测试到。例如,accountStatus是“E”用来中止,那么getPostLogonMessage()将返回“Your purchasing account has expired due to a lack of activity,”,如下所示:

public void testPostLogonMessageWhenStatusIsExpired(){

 String username = "robertmiller";

 String password = "java.net";

  class CustomerAccountMock extends CustomerAccount{

    ...   

    public void loadAccountStatus() {

      this.accountStatus = "E";

    }

 }

 ICustomerAccount ca = new CustomerAccountMock(username, password);

 try {

    ca.loadAccountStatus();

 }

  catch (CustomerAccountsSystemOutageException e){

    fail(""+e);

 }

 assertEquals("Your purchasing account has " +

                     "expired due to a lack of activity.",

                     ca.getPostLogonMessage());

}

  与之相反的方法是将getPostLogonMessage()的行为逻辑和loadAccountStatus()的状态改变工作放到一个方法里。下面的示例展示了这个错误的做法:

public String getPostLogonMessage() {

 return this.postLogonMessage;

}

public void loadAccountStatus()

                  throws CustomerAccountsSystemOutageException {

 Connection c = null;

 try {

    c = DriverManager.getConnection("databaseUrl", "databaseUser",

                                    "databasePassword");

    PreparedStatement ps = c.prepareStatement(

          "SELECT status FROM customer_account "

        + "WHERE username = ? AND password = ? ");

    ps.setString(1, this.username);

    ps.setString(2, this.password);

    ResultSet rs = ps.executeQuery();

    if (rs.next()) {

      this.accountStatus=rs.getString("status");

    }

    rs.close();

    ps.close();

    c.close();

  } catch (SQLException e) {

    throw new CustomerAccountsSystemOutageException(e);

 } finally {

    if (c != null) {

      try {

        c.close();

       } catch (SQLException e) {}

    }

 }

 if("A".equals(this.accountStatus)){

    this.postLogonMessage = "Your purchasing account is active.";

 } else if("E".equals(this.accountStatus)) {

    this.postLogonMessage = "Your purchasing account has " +

                            "expired due to a lack of activity.";

 } else {

    this.postLogonMessage = "Your purchasing account cannot be " +

                            "found, please call customer service "+

                            "for assistance.";

 }

}