"""异常类型单元测试""" import pytest from exceptions import ApiError, ParseError, RateLimitError, UnsupportedFormatError class TestParseError: def test_attributes(self): err = ParseError("test.pdf", "文件损坏") assert err.file_name == "test.pdf" assert err.reason == "文件损坏" def test_message_format(self): err = ParseError("data.csv", "编码无法识别") assert str(err) == "解析失败 [data.csv]: 编码无法识别" def test_is_exception(self): err = ParseError("f.txt", "reason") assert isinstance(err, Exception) class TestUnsupportedFormatError: def test_inherits_parse_error(self): err = UnsupportedFormatError("file.xyz", ".xyz") assert isinstance(err, ParseError) def test_extension_attribute(self): err = UnsupportedFormatError("file.abc", ".abc") assert err.extension == ".abc" def test_message_format(self): err = UnsupportedFormatError("doc.bin", ".bin") assert str(err) == "解析失败 [doc.bin]: 不支持的文件格式: .bin" def test_file_name_propagated(self): err = UnsupportedFormatError("my_file.xyz", ".xyz") assert err.file_name == "my_file.xyz" assert err.reason == "不支持的文件格式: .xyz" class TestApiError: def test_with_status_code(self): err = ApiError("服务端错误", status_code=500) assert err.status_code == 500 assert str(err) == "服务端错误" def test_without_status_code(self): err = ApiError("网络错误") assert err.status_code is None assert str(err) == "网络错误" def test_is_exception(self): assert isinstance(ApiError("msg"), Exception) class TestRateLimitError: def test_inherits_api_error(self): err = RateLimitError("速率限制", status_code=429) assert isinstance(err, ApiError) def test_status_code(self): err = RateLimitError("速率限制", status_code=429) assert err.status_code == 429 assert str(err) == "速率限制"