parent
c6537ec05a
commit
dd3997dc48
@ -0,0 +1,117 @@
|
||||
"""
|
||||
test_analyse.py - 单元测试分析模块的功能。
|
||||
"""
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
import pandas as pd
|
||||
from analyse import (
|
||||
read_danmakus,
|
||||
filter_danmakus,
|
||||
count_danmakus,
|
||||
get_top_danmakus,
|
||||
save_top_danmakus_to_excel
|
||||
)
|
||||
|
||||
class TestAnalyse(unittest.TestCase):
|
||||
"""
|
||||
测试分析模块的单元测试类。
|
||||
"""
|
||||
|
||||
@patch('pandas.read_excel')
|
||||
def test_read_danmakus(self, mock_read_excel):
|
||||
"""
|
||||
测试从 Excel 文件中读取弹幕内容的功能。
|
||||
"""
|
||||
# 模拟 Excel 数据
|
||||
mock_data = pd.DataFrame({'弹幕内容': ['弹幕1', '弹幕2', '弹幕3']})
|
||||
mock_read_excel.return_value = mock_data
|
||||
|
||||
# 调用读取函数
|
||||
result = read_danmakus("dummy_filename.xlsx")
|
||||
# 期望返回弹幕内容列表
|
||||
self.assertEqual(result, ['弹幕1', '弹幕2', '弹幕3'])
|
||||
|
||||
def test_filter_danmakus(self):
|
||||
"""
|
||||
测试根据关键词筛选弹幕内容的功能。
|
||||
"""
|
||||
danmakus = ['这是AI技术的未来', '普通弹幕', '智能应用']
|
||||
keywords = ['AI技术', '智能']
|
||||
|
||||
# 调用筛选函数
|
||||
result = filter_danmakus(danmakus, keywords)
|
||||
# 期望返回包含关键词的弹幕
|
||||
self.assertEqual(result, ['这是AI技术的未来', '智能应用'])
|
||||
|
||||
def test_filter_danmakus_no_match(self):
|
||||
"""
|
||||
测试没有匹配关键词时的筛选结果。
|
||||
"""
|
||||
danmakus = ['普通弹幕1', '普通弹幕2']
|
||||
keywords = ['AI技术', '智能']
|
||||
|
||||
# 调用筛选函数
|
||||
result = filter_danmakus(danmakus, keywords)
|
||||
# 期望返回空列表
|
||||
self.assertEqual(result, [])
|
||||
|
||||
def test_count_danmakus(self):
|
||||
"""
|
||||
测试统计弹幕出现频率的功能。
|
||||
"""
|
||||
danmakus = ['弹幕1', '弹幕2', '弹幕1']
|
||||
|
||||
# 调用统计函数
|
||||
result = count_danmakus(danmakus)
|
||||
# 期望返回正确的频率计数器
|
||||
self.assertEqual(result['弹幕1'], 2)
|
||||
self.assertEqual(result['弹幕2'], 1)
|
||||
|
||||
def test_get_top_danmakus(self):
|
||||
"""
|
||||
测试获取出现频率最高的 N 条弹幕。
|
||||
"""
|
||||
counter = count_danmakus(['弹幕1', '弹幕2', '弹幕1', '弹幕3', '弹幕1'])
|
||||
|
||||
# 调用获取最高频率弹幕的函数
|
||||
result = get_top_danmakus(counter, top_n=2)
|
||||
# 期望返回频率最高的弹幕及其计数
|
||||
self.assertEqual(result, [('弹幕1', 3), ('弹幕2', 1)])
|
||||
|
||||
def test_get_top_danmakus_less_than_n(self):
|
||||
"""
|
||||
测试获取的弹幕数量少于请求的 N 条时的情况。
|
||||
"""
|
||||
counter = count_danmakus(['弹幕1', '弹幕2'])
|
||||
|
||||
# 调用获取最高频率弹幕的函数
|
||||
result = get_top_danmakus(counter, top_n=5)
|
||||
# 期望返回现有的弹幕及其计数
|
||||
self.assertEqual(result, [('弹幕1', 1), ('弹幕2', 1)])
|
||||
|
||||
@patch('pandas.DataFrame.to_excel')
|
||||
def test_save_top_danmakus_to_excel(self, mock_to_excel):
|
||||
"""
|
||||
测试将频率最高的弹幕保存到 Excel 文件的功能。
|
||||
"""
|
||||
top_danmakus = [('弹幕1', 3), ('弹幕2', 1)]
|
||||
|
||||
# 调用保存函数
|
||||
save_top_danmakus_to_excel(top_danmakus, "output.xlsx")
|
||||
# 确保 to_excel 被调用一次
|
||||
mock_to_excel.assert_called_once()
|
||||
|
||||
@patch('pandas.DataFrame.to_excel')
|
||||
def test_save_top_danmakus_to_excel_empty(self, mock_to_excel):
|
||||
"""
|
||||
测试保存空的弹幕列表到 Excel 文件的功能。
|
||||
"""
|
||||
top_danmakus = []
|
||||
|
||||
# 调用保存函数
|
||||
save_top_danmakus_to_excel(top_danmakus, "output.xlsx")
|
||||
# 确保 to_excel 被调用一次
|
||||
mock_to_excel.assert_called_once()
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main() # 执行测试
|
Loading…
Reference in new issue