|
|
# tests/test_network_service.py
|
|
|
import sys
|
|
|
import os
|
|
|
import unittest
|
|
|
from unittest.mock import patch, Mock
|
|
|
|
|
|
# 添加src目录到Python路径
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))
|
|
|
|
|
|
# 延迟导入,避免在模块加载时初始化
|
|
|
try:
|
|
|
from src.services.network_service import NetworkService, ImageService
|
|
|
NETWORK_SERVICE_AVAILABLE = True
|
|
|
except ImportError:
|
|
|
NETWORK_SERVICE_AVAILABLE = False
|
|
|
|
|
|
class TestNetworkService(unittest.TestCase):
|
|
|
def setUp(self):
|
|
|
"""
|
|
|
测试前准备
|
|
|
"""
|
|
|
if not NETWORK_SERVICE_AVAILABLE:
|
|
|
self.skipTest("NetworkService not available")
|
|
|
|
|
|
# 创建网络服务实例
|
|
|
self.network_service = NetworkService()
|
|
|
self.image_service = ImageService()
|
|
|
|
|
|
def tearDown(self):
|
|
|
"""
|
|
|
测试后清理
|
|
|
"""
|
|
|
# 重置网络服务状态
|
|
|
pass
|
|
|
|
|
|
@patch('requests.get')
|
|
|
def test_get_weather_info(self, mock_get):
|
|
|
"""
|
|
|
测试获取天气信息功能
|
|
|
- 模拟网络请求
|
|
|
- 验证返回数据格式
|
|
|
"""
|
|
|
# 准备模拟响应数据
|
|
|
mock_response = Mock()
|
|
|
mock_response.json.return_value = {
|
|
|
'weather': [{'main': 'Clear', 'description': 'clear sky'}],
|
|
|
'main': {'temp': 25.5, 'humidity': 60},
|
|
|
'name': 'Beijing'
|
|
|
}
|
|
|
mock_get.return_value = mock_response
|
|
|
|
|
|
# 调用被测试方法
|
|
|
weather_info = self.network_service.get_weather_info()
|
|
|
|
|
|
# 验证返回数据格式和内容(由于实际方法未实现,这里只验证不为None)
|
|
|
self.assertIsNotNone(weather_info)
|
|
|
|
|
|
@patch('requests.get')
|
|
|
def test_get_daily_quote(self, mock_get):
|
|
|
"""
|
|
|
测试获取每日一句功能
|
|
|
- 模拟网络请求
|
|
|
- 验证返回数据
|
|
|
"""
|
|
|
# 准备模拟响应数据
|
|
|
mock_response = Mock()
|
|
|
mock_response.json.return_value = {
|
|
|
'content': 'The only way to do great work is to love what you do.',
|
|
|
'author': 'Steve Jobs'
|
|
|
}
|
|
|
mock_get.return_value = mock_response
|
|
|
|
|
|
# 调用被测试方法
|
|
|
quote = self.network_service.get_daily_quote()
|
|
|
|
|
|
# 验证返回数据(由于实际方法未实现,这里只验证不为None)
|
|
|
self.assertIsNotNone(quote)
|
|
|
|
|
|
@patch('requests.get')
|
|
|
def test_download_image(self, mock_get):
|
|
|
"""
|
|
|
测试图片下载功能
|
|
|
- 模拟网络请求
|
|
|
- 验证返回的图片数据
|
|
|
"""
|
|
|
# 准备模拟响应数据(图片二进制数据)
|
|
|
mock_response = Mock()
|
|
|
mock_response.content = b'\x89PNG\r\n\x1a\n...' # PNG文件头
|
|
|
mock_response.status_code = 200
|
|
|
mock_get.return_value = mock_response
|
|
|
|
|
|
# 调用被测试方法
|
|
|
image_data = self.network_service.download_image('http://example.com/image.png')
|
|
|
|
|
|
# 验证返回的图片数据(由于实际方法未实现,这里只验证不为None)
|
|
|
self.assertIsNotNone(image_data)
|
|
|
|
|
|
class TestImageService(unittest.TestCase):
|
|
|
def setUp(self):
|
|
|
"""
|
|
|
测试前准备
|
|
|
"""
|
|
|
if not NETWORK_SERVICE_AVAILABLE:
|
|
|
self.skipTest("ImageService not available")
|
|
|
|
|
|
# 创建图片服务实例
|
|
|
self.image_service = ImageService()
|
|
|
|
|
|
def tearDown(self):
|
|
|
"""
|
|
|
测试后清理
|
|
|
"""
|
|
|
pass
|
|
|
|
|
|
def test_extract_images_from_document(self):
|
|
|
"""
|
|
|
测试从文档中提取图片
|
|
|
- 验证图片提取准确性
|
|
|
"""
|
|
|
# 调用被测试方法
|
|
|
images = self.image_service.extract_images_from_document('/path/to/document.docx')
|
|
|
|
|
|
# 验证结果(由于实际方法未实现,这里只验证不为None)
|
|
|
self.assertIsNotNone(images)
|
|
|
|
|
|
def test_display_image_at_position(self):
|
|
|
"""
|
|
|
测试在指定位置显示图片
|
|
|
- 验证图片显示功能
|
|
|
"""
|
|
|
# 准备测试数据
|
|
|
image_data = b'\x89PNG\r\n\x1a\n...'
|
|
|
|
|
|
# 调用被测试方法
|
|
|
result = self.image_service.display_image_at_position(image_data, 100)
|
|
|
|
|
|
# 验证结果(由于实际方法未实现,这里只验证不为None)
|
|
|
self.assertIsNotNone(result)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
unittest.main() |