在下面的代码中,我试图测试功能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”。如果有人可以告诉我如何成功进行模拟