Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unittest中模拟整个python类时无法引发异常_Python_Unit Testing_Mocking_Pytest - Fatal编程技术网

在unittest中模拟整个python类时无法引发异常

在unittest中模拟整个python类时无法引发异常,python,unit-testing,mocking,pytest,Python,Unit Testing,Mocking,Pytest,以下是原始类: class Original(object): def __ init__(self, path): self.xml = None self.path = path self.convert() # <----- I can't modify anything in my class def convert(self): #some code here self.xml =

以下是原始类:

class Original(object):
    def __ init__(self, path):
        self.xml = None
        self.path = path
        self.convert() # <----- I can't modify anything in my class

    def convert(self):
        #some code here
        self.xml = external_api_call # <------------this generates objects for this property
        self.transform()

    def transform(self):
        #some code
        if not self._xml:
            raise Exception('None value')
        for project in self.xml.projects:
            try:
                value = getattr(project, "name")
            except AttributeError:
                raise Exception('AttributeError')
            print('Yes it worked')
它应该生成一个异常,但不会。我还尝试了不同的方法,例如模拟对象的副作用特性

mock_object._xml.return_value

不要修补
Original
,只修补外部api调用,比如使用mock.patch(“something.external\u api\u call”,lamda*args,**kws:None):
mock_object._xml.return_value
@patch('something.Original')
def test_case_1(Original):
    Original.xml.side_effect = Exception()
    Original.transform()