我有一个单元测试,可以测试是否正确引发了自定义异常。但是我得到了一个 AssertionError:InvalidLength not raised
以下是我的单元测试
var weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
这是我正在测试的功能
@patch('services.class_entity.validate')
@patch('services.class_entity.jsonify')
def test_should_raise_invalid_length_exception(self, mock_jsonify, mock_validate):
mock_validate.return_value = True
data = self.data
data['traditional_desc'] = "Contrary to popular"
mock_jsonify.return_value = {
"success": False,
"results": {
"message": "Invalid value for traditional_desc"
}
}
with self.assertRaises(InvalidLength) as cm:
BenefitTemplateService.create(data)
除了InvalidLength 工作正常,因为如果我尝试打印它就会执行该行代码。所以我假设正在调用InvalidLength Exception,但我不确定我的unittest结果是否失败。你能帮忙吗
答案 0 :(得分:2)
create
引发InvalidLength
异常但随后捕获并以静默方式处理它,您的测试期望它实际提升它。
使用与assertRaises
不同的断言。 except
块返回一个json,因此您的测试可以检查json的内容。
答案 1 :(得分:0)
你正在提出异常
if not validate_string(params['traditional_desc'], 0, 1000, characters_supported="ascii"):
raise InvalidLength(400, "Invalid value for traditional_desc")
然后你抓住它并返回一个json
except InvalidLength as e:
response = {
"success": False,
"results": {
"message": e.message
}
}
return jsonify(response), e.code
因此异常不会传播到测试中。
解决这个问题的两种方法:
InvalidLength
异常。我认为考虑您的用例,您应该更新您的测试以检查响应消息是否正确。