AssertionError:未引发异常

时间:2017-08-15 10:50:10

标签: python unit-testing flask pybuilder

我有一个单元测试,可以测试是否正确引发了自定义异常。但是我得到了一个 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结果是否失败。你能帮忙吗

2 个答案:

答案 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

因此异常不会传播到测试中。

解决这个问题的两种方法:

  • 在测试中,检查json响应是否正确。 " traditional_desc"
  • 的值无效
  • 或者不要在代码中捕获InvalidLength异常。

我认为考虑您的用例,您应该更新您的测试以检查响应消息是否正确。