Files
HeurAMS/tests/kernel/puzzles/test_cloze.py
2025-12-16 03:28:29 +08:00

51 lines
1.9 KiB
Python

import unittest
from unittest.mock import patch, MagicMock
from heurams.kernel.puzzles.cloze import ClozePuzzle
class TestClozePuzzle(unittest.TestCase):
"""测试 ClozePuzzle 类"""
def test_init(self):
"""测试初始化"""
puzzle = ClozePuzzle("hello/world/test", min_denominator=3, delimiter="/")
self.assertEqual(puzzle.text, "hello/world/test")
self.assertEqual(puzzle.min_denominator, 3)
self.assertEqual(puzzle.delimiter, "/")
self.assertEqual(puzzle.wording, "填空题 - 尚未刷新谜题")
self.assertEqual(puzzle.answer, ["填空题 - 尚未刷新谜题"])
@patch('random.sample')
def test_refresh(self, mock_sample):
"""测试 refresh 方法"""
mock_sample.return_value = [0, 2] # 选择索引 0 和 2
puzzle = ClozePuzzle("hello/world/test", min_denominator=2, delimiter="/")
puzzle.refresh()
# 检查 wording 和 answer
self.assertNotEqual(puzzle.wording, "填空题 - 尚未刷新谜题")
self.assertNotEqual(puzzle.answer, ["填空题 - 尚未刷新谜题"])
# 根据模拟,应该有两个填空
self.assertEqual(len(puzzle.answer), 2)
self.assertEqual(puzzle.answer, ["hello", "test"])
# wording 应包含下划线
self.assertIn("__", puzzle.wording)
def test_refresh_empty_text(self):
"""测试空文本的 refresh"""
puzzle = ClozePuzzle("", min_denominator=3, delimiter="/")
puzzle.refresh() # 不应引发异常
# 空文本导致 wording 和 answer 为空
self.assertEqual(puzzle.wording, "")
self.assertEqual(puzzle.answer, [])
def test_str(self):
"""测试 __str__ 方法"""
puzzle = ClozePuzzle("hello/world", min_denominator=2, delimiter="/")
str_repr = str(puzzle)
self.assertIn("填空题 - 尚未刷新谜题", str_repr)
if __name__ == '__main__':
unittest.main()