|
|
|
|
@ -0,0 +1,148 @@
|
|
|
|
|
package test;
|
|
|
|
|
|
|
|
|
|
// 导入JUnit 3的核心包
|
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
|
import junit.framework.TestSuite;
|
|
|
|
|
import view.gui.LoginGui;
|
|
|
|
|
import junit.framework.Test;
|
|
|
|
|
|
|
|
|
|
import java.io.PrintStream;
|
|
|
|
|
import javax.swing.SwingUtilities;
|
|
|
|
|
|
|
|
|
|
// 导入你自己的业务类
|
|
|
|
|
import ctrl.LoginCtrl;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author Nisiyu
|
|
|
|
|
* @version 1.0
|
|
|
|
|
* @created 21-11月-2025 15:26:28
|
|
|
|
|
*/
|
|
|
|
|
public class LoginIntegratedTest extends TestCase {
|
|
|
|
|
// 声明业务控制类对象
|
|
|
|
|
private LoginCtrl loginCtrl;
|
|
|
|
|
|
|
|
|
|
// 每个测试用例执行前初始化对象
|
|
|
|
|
protected void setUp() throws Exception {
|
|
|
|
|
super.setUp();
|
|
|
|
|
loginCtrl = new LoginCtrl();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例1:账号密码正确→登录成功(返回true)
|
|
|
|
|
public void testLoginSuccess() {
|
|
|
|
|
// 替换成你数据库里的真实账号密码(必须是6-12位数字)
|
|
|
|
|
boolean result = loginCtrl.validateLogin("2023210481", "123456");
|
|
|
|
|
// 断言:结果应该是true
|
|
|
|
|
assertTrue("账号密码正确时登录应成功", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例2:密码错误→登录失败(返回false)
|
|
|
|
|
public void testLoginFail_PwdError() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1001", "654321");
|
|
|
|
|
assertFalse("密码错误时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例3:账号错误→登录失败
|
|
|
|
|
public void testLoginFail_AccountError() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("9999", "123456");
|
|
|
|
|
assertFalse("账号错误时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例4:账号密码为空→登录失败
|
|
|
|
|
public void testLoginFail_EmptyInput() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("", "");
|
|
|
|
|
assertFalse("空输入时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例5:账号锁定→登录失败(假设账号1002是锁定状态)
|
|
|
|
|
public void testLoginFail_Lock() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1002", "123456");
|
|
|
|
|
assertFalse("账号锁定时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例6:每日登录次数超限→登录失败
|
|
|
|
|
public void testLoginFail_CountLimit() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1003", "123456");
|
|
|
|
|
assertFalse("次数超限时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例7:账号格式错误(非数字)→登录失败
|
|
|
|
|
public void testLoginFail_AccountFormat() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("abc123", "123456");
|
|
|
|
|
assertFalse("账号格式错误时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例8:密码长度不足→登录失败
|
|
|
|
|
public void testLoginFail_PwdLength() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1001", "123");
|
|
|
|
|
assertFalse("密码长度不足时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例9:数据库连接失败→登录失败(模拟异常,后续可在业务层加逻辑)
|
|
|
|
|
public void testLoginFail_DBError() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1001", "123456");
|
|
|
|
|
assertFalse("数据库异常时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例10:特殊字符密码→登录失败
|
|
|
|
|
public void testLoginFail_SpecialPwd() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1001", "123!@#");
|
|
|
|
|
assertFalse("特殊字符密码时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
// 测试用例3:账号格式错误(5位数字)→登录失败
|
|
|
|
|
public void testLoginFail_AccountLength() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("12345", "123456");
|
|
|
|
|
assertFalse("账号长度不足6位时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例4:账号格式错误(含字母)→登录失败
|
|
|
|
|
public void testLoginFail_AccountNonNumber() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("123a56", "123456");
|
|
|
|
|
assertFalse("账号含非数字时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例5:密码长度不足(5位)→登录失败
|
|
|
|
|
public void testLoginFail_PwdLength1() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1001", "12345");
|
|
|
|
|
assertFalse("密码长度不足6位时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例6:密码含特殊字符→登录失败
|
|
|
|
|
public void testLoginFail_PwdSpecialChar() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1001", "123!456");
|
|
|
|
|
assertFalse("密码含特殊字符时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例7:账号密码为空→登录失败
|
|
|
|
|
public void testLoginFail_EmptyInput1() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("", "");
|
|
|
|
|
assertFalse("空输入时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例8:账号正确、密码为空→登录失败
|
|
|
|
|
public void testLoginFail_EmptyPwd() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1001", "");
|
|
|
|
|
assertFalse("密码为空时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例9:账号为空、密码正确→登录失败
|
|
|
|
|
public void testLoginFail_EmptyAccount() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("", "123456");
|
|
|
|
|
assertFalse("账号为空时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试用例10:账号长度超限(13位)→登录失败
|
|
|
|
|
public void testLoginFail_AccountOverLength() {
|
|
|
|
|
boolean result = loginCtrl.validateLogin("1234567890123", "123456");
|
|
|
|
|
assertFalse("账号长度超过12位时登录应失败", result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ========== 简化后的suite方法:只保留GUI调用,删除所有反射/编码代码 ==========
|
|
|
|
|
public static Test suite() {
|
|
|
|
|
TestSuite suite = new TestSuite(LoginIntegratedTest.class);
|
|
|
|
|
// 仅保留GUI调用(如果不需要弹出LoginGui,这行也可以删)
|
|
|
|
|
SwingUtilities.invokeLater(() -> new LoginGui().showGui());
|
|
|
|
|
suite.setName("ATM登录测试套件");
|
|
|
|
|
return suite;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|