# test_integration_username.py import pytest import sys import os # 获取文件所在目录的上两级目录(EnglishPal) project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) sys.path.append(project_root) from app.Login import add_user, check_username_availability # 模拟数据库行为 class MockUserDB: def __init__(self): self.users = {} def insert_user(self, username, password, start_date, expiry_date): if username in self.users: return False self.users[username] = { 'password': password, 'start_date': start_date, 'expiry_date': expiry_date } return True def get_user_by_username(self, username): return self.users.get(username) original_insert_user = None original_get_user_by_username = None @pytest.fixture(autouse=True) def setup_and_teardown(): global original_insert_user, original_get_user_by_username from app.Login import insert_user as original_iu, get_user_by_username as original_gubu original_insert_user = original_iu original_get_user_by_username = original_gubu mock_db = MockUserDB() def mock_insert_user(**kwargs): return mock_db.insert_user(**kwargs) def mock_get_user_by_username(username): return mock_db.get_user_by_username(username) from app.Login import insert_user, get_user_by_username insert_user = mock_insert_user get_user_by_username = mock_get_user_by_username yield from app.Login import insert_user, get_user_by_username insert_user = original_insert_user get_user_by_username = original_get_user_by_username def test_add_user_with_empty_username_fails(): with pytest.raises(ValueError) as exc_info: add_user('', 'Password123') assert "Attribute User.name is required" in str(exc_info.value) def test_add_user_with_valid_username_succeeds(): result = add_user('validuser', 'Password123') assert result is None # 如果 add_user 不返回值,则断言无异常即可 assert check_username_availability('validuser') is False # 用户已存在