Can't catch mocked exception because it doesn't inherit BaseException

后端 未结 6 1653
无人共我
无人共我 2020-12-09 02:35

I\'m working on a project that involves connecting to a remote server, waiting for a response, and then performing actions based on that response. We catch a couple of diff

6条回答
  •  萌比男神i
    2020-12-09 02:50

    I just ran into the same problem when mocking struct.

    I get the error:

    TypeError: catching classes that do not inherit from BaseException is not allowed

    When trying to catch a struct.error raised from struct.unpack.

    I found that the simplest way to get around this in my tests was to simply set the value of the error attribute in my mock to be Exception. For example

    The method I want to test has this basic pattern:

    def some_meth(self):
        try:
            struct.unpack(fmt, data)
        except struct.error:
            return False
        return True
    

    The test has this basic pattern.

    @mock.patch('my_module.struct')
    def test_some_meth(self, struct_mock):
        '''Explain how some_func should work.'''
        struct_mock.error = Exception
        self.my_object.some_meth()
        struct_mock.unpack.assert_called()
        struct_mock.unpack.side_effect = struct_mock.error
        self.assertFalse(self.my_object.some_meth()
    

    This is similar to the approach taken by @BillB, but it is certainly simpler as I don't need to add imports to my tests and still get the same behavior. To me it would seem this is the logical conclusion to the general thread of reasoning in the answers here.

提交回复
热议问题