データベースのバックエンドに接続されている小さなJavaプロジェクトがあります。ログイン機能がありますが、テストハーネスに入れると、正しい出力を返すことができません。
public boolean validateLogin(User validate) {
{
Connection conn = null;
String dbUserName = "root"; // MySQL database username
String dbPassword = "nbuser"; // MySQL database password
boolean returnValue = false;
String dbUrl = "jdbc:mysql://localhost:3306/project";
try {
Class forNam = Class.forName("com.mysql.jdbc.Driver");
try {
forNam.newInstance();
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
}
} catch (ClassNotFoundException ex) {
}
try {
conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
System.out.println("Database connection establish...!");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM login_register WHERE user_id='" + validate.getUserID() + "'");
if (rs.next()) {
if (rs.getString(2).equals(validate.getUserPassword())) {
System.out.println("User and Password Match");
} else {
System.out.println("No User Or Password Match");
}
}
else {
System.out.println("No User Or Password Match");
}
} catch (SQLException ex) {
System.out.println("Cannot connect to database server...!!");
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("Database connection terminated...!!!");
returnValue = true;
} catch (SQLException ex) {
}
}
}
return returnValue;
}
}
次に、このステートメントが機能するかどうかを確認するためのテストコード
User testLogin = new User();
testLogin.setUserID("userid");
testLogin.setUserPassword("password");
if (test.validateLogin(testLogin)) {
System.out.println("User logged in");
}
else {
System.out.println("Failed to login");
}
上記の2ビットの情報はデータベースにあるため、IDEでの出力は次のようになります。
Database connection establish...!
User and Password Match
Database connection terminated...!!!
User logged in
しかし、値をデータベースにないものに変更すると、
Database connection establish...!
No User Or Password Match
Database connection terminated...!!!
User logged in
そのため、値が一致しない場合のテストコードに問題があります。値が一致しないとは言えません。これは、後の作業で関数に必要です。"failed to login"
IDとパスワードがテスト側で一致しないかどうかを判断するために、テストコードで何を変更する必要があるかについてのアイデア