我正在尝试测试一些使用boto的python代码。我不想尝试针对AWS进行集成测试,所以我尝试用moto模拟它,但它的行为并不像我预期的那样。测试代码如下:importioimportboto3frommotoimportmock_ec2fromunittest.mockimportpatchfromargparseimportNamespacefromawswlimportcommands@mock_ec2@patch('awswl.externalip.get_external_ip',return_value='192.0.2.1')deftest_list_command_li
我有一个返回对象的函数调用:r=Foo(x,y)其中r有一组丰富的嵌套属性。例如,我可以访问r.prop_a.prop_b.prop_c。我想模拟Foo,以便修改r的特定叶属性,即r.prop_a.prop_b.prop_c返回我控制的值:>>r=Foo(x,y)>>r.prop_a.prop_b.prop_c'fish'>>#somemockmagicpatchingofFooistakingplacehere>>r=Foo(x,y)>>r.prop_a.prop_b.prop_c'my_fish'我不太关心中间属性。有没有一种优雅的方式来模拟嵌套属性mock?
我有一个模型,我正在尝试在不调用数据库层的情况下测试验证。我不会用文字描述,而是会发布一些示例代码。这里的问题是ForeignKey与Bar的关系,它与我要测试的内容无关,但阻止我运行我想要的测试。首先,myapp/models.py:fromdjango.core.exceptionsimportValidationErrorfromdjango.dbimportmodelsclassBadFooError(ValidationError):passclassBar(models.Model):description=models.CharField(max_length=20)cl
当尝试对返回元组的方法进行单元测试并且我试图查看代码是否访问正确的元组索引时,python尝试评估预期的调用并将其转换为字符串。call().methodA().__getitem__(0)最终被转换为'().methodA'在我的expected_calls断言列表中。提供的示例代码产生输出和回溯:expected_calls=[call().methodA(),'().methodA']result_calls=[call().methodA(),call().methodA().__getitem__(0)]====================================
此脚本失败:importmockclassMyClass(object):@classmethoddefmy_method(cls):print('my_method')defmocked_method(cls):print('Iwantthismethodtogetcalled')withmock.patch.object(MyClass,'my_method',mocked_method):MyClass.my_method()异常(exception):Traceback(mostrecentcalllast):File"/home/foo/tmp/test_mocking_cl
我正在尝试对一段代码进行单元测试:def_parse_results(self,file_name):results_file=open(file_name)results_data=list(csv.reader(results_file))index=len(results_data[1])-1results_file.close()returnfloat(results_data[1][index])像这样使用mock_open:@mock.patch('path.open',mock.mock_open(read_data='test,test2,test3,test4'))d
我正在尝试模拟从文件中读取。使用示例,可以使用如下构造来完成:withpatch('__builtin__.open',mock_open(read_data='1'),create=True)asm:withopen('foo')ash:result=h.read()我想知道,有没有一种方法可以使用我的测试用例注释来模拟打开函数。喜欢:@patch.object(__builtin__,'open')deftest_check_status_running(self,m_open):我没有找到正确的方法,因为对我来说它适用于int而不适用于字符串:@patch.object(__
我已经浏览了页面https://docs.python.org/3/library/unittest.mock-examples.html我看到他们列出了一个关于如何模拟生成器的例子我有一个代码,我调用生成器给我一组值,我将这些值保存为字典。我想在我的单元测试中模拟对该生成器的调用。我已经写了下面的代码,但它不起作用。我哪里错了?In[7]:items=[(1,'a'),(2,'a'),(3,'a')]In[18]:deff():print"here"foriin[1,2,3]:yieldi,'a'In[8]:defcall_f():...:my_dict=dict(f())...:p
单元测试应该测试功能并尽量不了解实现细节。Mock.assert_called_with()是一个方便的函数,但据我所知它将*args与*args和**kwargs到**kwargs。因此:#classtobemockedduringtestclassSomeClass():deffunc(self,a,b,c=5):#...#codeundertestsomaclass_instance.func(1,b=2,c=3)#testcodethatworkssomeclass_mock.func.assert_called_with(1,b=2,c=3)#testcodethatwon'
如何使用@patch装饰器来修补内置的input()函数?例如,我想测试question.py中的一个函数,它包含对input()的调用:defquery_yes_no(question,default="yes"):"""Adaptedfromhttp://stackoverflow.com/questions/3041986/python-command-line-yes-no-input"""valid={"yes":True,"y":True,"ye":True,"no":False,"n":False}ifdefaultisNone:prompt="[y/n]"elifdef