没有引发异常assertRaises()?

时间:2018-02-14 11:15:03

标签: python unit-testing

我输错了输入,我希望引发异常。不知何故,这种情况并没有发生。这是我的单元测试代码:

def test_invalid_bag_json_conversion_1(self):
        file_name = "../test/test_files/wrong_bag.bag"
        ru = RosbagUploader(file_name, self.json_output, "", "", "", "")
        status = ru.start()
        self.assertRaises(Exception, RosbagUploader, file_name, self.json_output, "", "", "", "")
        self.assertEquals(ReturnCodes.FAIL, status)

和我正在测试的代码:

class RosbagUploader(object):
    """
    @brief Uploads deserialized input Rosbag file to ElasticSearch or
           stores it locally
    """
    def __init__(self, _rosbag_filepath, _json_filename, _es_addr, _es_index,
                 _es_type, _buffer_size):
        self.overall_status = ReturnCodes.SUCCESS
        self._rosbag_filepath = _rosbag_filepath
        self._json_filename = _json_filename
        self._buffer_size = _buffer_size if _buffer_size > 0 else 5000
        self._es_type = _es_type
        self._es_addr = _es_addr
        self._es_index = _es_index
        self._es_buff = []
        try:
            self._rosbag = rosbag.Bag(_rosbag_filepath, "r")
            if self._es_addr:
                self._es = Elasticsearch() if _es_addr == "" else \
                    Elasticsearch([_es_addr])
            self._total_num_record = self._rosbag.get_message_count()
        except:
            print("[ERROR] {}".format(sys.exc_info()))
            self.overall_status = ReturnCodes.FAIL

它显示引发异常的输出如下:

[ERROR] (<class 'rosbag.bag.ROSBagException'>, ROSBagException(), <traceback object at 0x7fdcb463e8c0>)
EException AttributeError: "'RosbagUploader' object has no attribute '_rosbag'" in <bound method RosbagUploader.__del__ of <rosbag_deserializer_core.RosbagUploader object at 0x7fdcb4899ad0>> ignored

它应该做什么。但为什么它没有提出例外呢?

2 个答案:

答案 0 :(得分:1)

你有__del__破坏方法吗?似乎在那里失败。

答案 1 :(得分:1)

你基本上忽略了这个例外,因为你没有在print语句之后重新加注:

try:
    [...]
except:
    print("[ERROR] {}".format(sys.exc_info()))
    self.overall_status = ReturnCodes.FAIL

您需要为呼叫者重新加注以接收例外:

try:
    [...]
except:
    print("[ERROR] {}".format(sys.exc_info()))
    self.overall_status = ReturnCodes.FAIL
    raise