# tests/test_main.py import sys import os import unittest from unittest.mock import patch, MagicMock # 添加src目录到Python路径 sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) class TestMagicWordApplication(unittest.TestCase): def setUp(self): """ 测试前准备 - 初始化测试环境 - 创建测试数据 """ # 使用unittest.mock模拟QApplication避免Qt初始化 self.app_patcher = patch('PyQt5.QtWidgets.QApplication') self.mock_app = self.app_patcher.start() self.mock_app_instance = MagicMock() self.mock_app.return_value = self.mock_app_instance # 模拟导入MainWindow with patch('PyQt5.QtWidgets.QApplication'), \ patch('PyQt5.QtWidgets.QMainWindow'), \ patch('PyQt5.QtWidgets.QTextEdit'), \ patch('PyQt5.QtWidgets.QAction'), \ patch('PyQt5.QtWidgets.QFileDialog'), \ patch('PyQt5.QtWidgets.QVBoxLayout'), \ patch('PyQt5.QtWidgets.QWidget'), \ patch('PyQt5.QtWidgets.QLabel'), \ patch('PyQt5.QtWidgets.QStatusBar'), \ patch('PyQt5.QtWidgets.QMessageBox'): from src.main_window import MainWindow self.window = MainWindow() def tearDown(self): """ 测试后清理 - 清理测试数据 - 恢复环境状态 """ # 停止mock self.app_patcher.stop() def test_application_startup(self): """ 测试应用启动 - 验证应用能够正常启动 - 检查初始状态 """ # 验证窗口标题 with patch.object(self.window, 'windowTitle', return_value='隐私学习软件 - 仿Word'): title = self.window.windowTitle() self.assertEqual(title, '隐私学习软件 - 仿Word') # 验证窗口不是全屏 with patch.object(self.window, 'isFullScreen', return_value=False): fullscreen = self.window.isFullScreen() self.assertFalse(fullscreen) def test_file_operations(self): """ 测试文件操作 - 验证文件打开、保存等功能 """ # 模拟菜单栏存在 with patch.object(self.window, 'menuBar', return_value=MagicMock()): menubar = self.window.menuBar() self.assertIsNotNone(menubar) # 模拟状态栏存在 with patch.object(self.window, 'statusBar', return_value=MagicMock()): statusbar = self.window.statusBar() self.assertIsNotNone(statusbar) if __name__ == '__main__': unittest.main()