我已经为客户构建了一个付费的CMS+发票系统,我需要更加严格地进行测试。我将所有数据保存在DjangoORM中,并有一堆Celery任务以不同的时间间隔运行,以确保在用户不支付发票时发送新发票和发票提醒并切断访问权限。例如,我希望能够运行以下测试:创建一个新用户并为访问该网站的X天生成一张发票模拟X+1天的过去,并运行我在Celery中设置的所有任务。检查是否已向用户开具另外X天的新发票。到目前为止,我提出的KISS方法是在单独的机器上进行所有测试,并在操作系统级别实际操作日期/时间。所以测试脚本会:将系统日期设置为第1天创建一个新用户并为X天的访问生成第一张发票提前1天然后系统日期。
我已经为客户构建了一个付费的CMS+发票系统,我需要更加严格地进行测试。我将所有数据保存在DjangoORM中,并有一堆Celery任务以不同的时间间隔运行,以确保在用户不支付发票时发送新发票和发票提醒并切断访问权限。例如,我希望能够运行以下测试:创建一个新用户并为访问该网站的X天生成一张发票模拟X+1天的过去,并运行我在Celery中设置的所有任务。检查是否已向用户开具另外X天的新发票。到目前为止,我提出的KISS方法是在单独的机器上进行所有测试,并在操作系统级别实际操作日期/时间。所以测试脚本会:将系统日期设置为第1天创建一个新用户并为X天的访问生成第一张发票提前1天然后系统日期。
我有一个定义类属性的基类和一些依赖它的子类,例如classBase(object):assignment=dict(a=1,b=2,c=3)我想用不同的作业对这个类进行单元测试,例如空字典,单项等。当然这非常简化,不是重构我的类或测试的问题我想出的(pytest)测试最终是有效的from.baseimportBasedeftest_empty(self):withmock.patch("base.Base.assignment")asa:a.__get__=mock.Mock(return_value={})assertlen(Base().assignment.values())==
我有一个定义类属性的基类和一些依赖它的子类,例如classBase(object):assignment=dict(a=1,b=2,c=3)我想用不同的作业对这个类进行单元测试,例如空字典,单项等。当然这非常简化,不是重构我的类或测试的问题我想出的(pytest)测试最终是有效的from.baseimportBasedeftest_empty(self):withmock.patch("base.Base.assignment")asa:a.__get__=mock.Mock(return_value={})assertlen(Base().assignment.values())==
我的项目中有两个不同的模块。一个是配置文件,其中包含LOGGING_ACTIVATED=False这个常量用在第二个模块(我们称之为main)中,如下所示:ifLOGGING_ACTIVATED:amqp_connector=Connector()在我的主模块测试类中,我想用值修补这个常量True不幸的是,以下不起作用@patch("config.LOGGING_ACTIVATED",True)这也不起作用:@patch.object("config.LOGGING_ACTIVATED",True)有人知道如何修补来自不同模块的常量吗? 最佳答案
我的项目中有两个不同的模块。一个是配置文件,其中包含LOGGING_ACTIVATED=False这个常量用在第二个模块(我们称之为main)中,如下所示:ifLOGGING_ACTIVATED:amqp_connector=Connector()在我的主模块测试类中,我想用值修补这个常量True不幸的是,以下不起作用@patch("config.LOGGING_ACTIVATED",True)这也不起作用:@patch.object("config.LOGGING_ACTIVATED",True)有人知道如何修补来自不同模块的常量吗? 最佳答案
我想修改传递给模块中方法的参数,而不是替换它的返回值。我找到了解决这个问题的方法,但这似乎很有用,并且已经变成了mock的教训。模块.pyfromthird_partyimportThirdPartyClassThirdPartyClass.do_something('foo','bar')ThirdPartyClass.do_something('foo','baz')tests.py@mock.patch('module.ThirdPartyClass.do_something')deftest(do_something):#Insteadofdirectlyoverridingi
我想修改传递给模块中方法的参数,而不是替换它的返回值。我找到了解决这个问题的方法,但这似乎很有用,并且已经变成了mock的教训。模块.pyfromthird_partyimportThirdPartyClassThirdPartyClass.do_something('foo','bar')ThirdPartyClass.do_something('foo','baz')tests.py@mock.patch('module.ThirdPartyClass.do_something')deftest(do_something):#Insteadofdirectlyoverridingi
classHelloWorld(object):defsay_it(self):return'HelloIamHelloWorld'defi_call_hello_world(hw_obj):print'here...checktype:%s'%type(HelloWorld)ifisinstance(hw_obj,HelloWorld):printhw_obj.say_it()frommockimportpatch,MagicMockimportunittestclassTestInstance(unittest.TestCase):@patch('__main__.HelloWor
classHelloWorld(object):defsay_it(self):return'HelloIamHelloWorld'defi_call_hello_world(hw_obj):print'here...checktype:%s'%type(HelloWorld)ifisinstance(hw_obj,HelloWorld):printhw_obj.say_it()frommockimportpatch,MagicMockimportunittestclassTestInstance(unittest.TestCase):@patch('__main__.HelloWor