Python单元测试|模拟|补丁未按预期链接

时间:2020-06-21 22:10:29

标签: python unit-testing mocking

在下面的代码中,我试图测试功能get_ascc_testcall(self,obj)。 (我对原始代码做了一些修改)

这是该课程的代码:

class MyClass():

    #..some code..
    #..code..
    def get_ascc_testcall(self,obj):

        rc_list = TestCall.objects.of(self.context['year']).filter(eventid=obj.id)

        if rc_list:
            rc = rc_list[0]
            results_dict = json.loads(rc.results)
            results = self.get_rollcall_text(results_dict)
            rc_num = "Roll Num" + rc.consumer_number

            return obj.text  + rc_num + results
        
        else:

            return obj.text

我的目标是模拟TestCall.objects.of(self.context['year']).filter(eventid=obj.id),它是函数的第二行和self.get_rollcall_text(results_dict)

这是我用补丁编写的测试类:

class TestMyClass(unitTest.Testcase):

    def setUp(self):

        self.roll_data = {
            'consumer_number':16,
            'results':{'yes':100},
            'eventid':"X-mas"
        }

        self.bill_data = {
            'vote_num':1,
            'id':"X-mas",
            "text":"Voting for the event"
        }

    @patch('mymodule.Testcall')
    def test_get_ascc_testcall(self,Rollcall):

        Testcall.objects.of.return_value = [self.roll_data]
        result = MyClass.get_ascc_testcall(self,self.bill_data)

        self.assertEqual("Voting for the event Roll Num 16: yeas 100, nays 0", result)

我目前很震惊,因为我的代码Testcall.objects.of.return_value = [self.roll_data]无法模拟TestCall.objects.of(self.context['year']).filter(eventid=obj.id)并且得到了属性错误TestMyClass没有属性“ context”。如果有人可以告诉我如何成功进行模拟

0 个答案:

没有答案