You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Curriculum_Design/tests/test_main.py

78 lines
2.7 KiB

# 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()