在Python中编写单元测试时模拟类或方法时,为什么需要使用@patch装潢师?我可以在没有任何补丁注释的情况下用Mock对象替换该方法。例子:classTestFoobar(unittest.TestCase):defsetUp(self):self.foobar=FooBar()#1)Withpatchdecorator:@patch.object(FooBar,"_get_bar")@patch.object(FooBar,"_get_foo")deftest_get_foobar_with_patch(self,mock_get_foo,mock_get_bar):mock_g
我想使用pytestmonkeypatch插件,但我不知道如何导入它。我试过:importmonkeypath导入pytest.monkeypatch从pytest导入monkeypatch 最佳答案 它不是插件,它是内置的pytestfixture.简而言之,这意味着您只需编写一个带有monkeypatch参数的测试,测试就会将monkeypatch对象作为该参数。您链接的页面有一个简单的示例:deftest_some_interaction(monkeypatch):monkeypatch.setattr("os.getcwd"
我正在尝试为以下异步、等待方法编写pytest,但我一无所获。classUserDb(object):asyncdefadd_user_info(self,userInfo):returnawaitself.post_route(route='users',json=userInfo)asyncdefpost_route(self,route=None,json=None,params=None):uri=self.uri+routeifrouteelseself.uriasyncwithself.client.post(uri,json=json,params=params)asre
我正在使用pytest测试嵌入式系统的python模型。要测试的功能因平台而异。(我在此上下文中使用“平台”来表示嵌入式系统类型,而不是操作系统类型)。组织我的测试最直接的方法是根据平台类型将它们分配到目录。/platform1/platform2/etc.pytest/platform1由于许多功能跨平台重叠,这很快就变得难以支持。从那以后,我将我的测试移到了一个目录中,每个功能区域的测试分配给一个文件名(例如test_functionalityA.py)。然后,我使用pytest标记来指示文件中的哪些测试适用于给定平台。@pytest.mark.all_platformsdefte
在具有session范围和autouse=True的fixture中定义对象的最佳方法是什么,以便它可用于所有测试?@pytest.fixture(scope='session',autouse=True)defsetup_func(request):obj=SomeObj()接下来,我想要一些魔法,让之前创建的obj将出现在每个测试上下文中,而不需要每个测试都定义setup_funcfixture。deftest_one():obj.do_something_fancy() 最佳答案 我的建议是将fixture添加到conftes
我有一些想要参数化的测试,但有些测试应该只应用于参数的一个值。下面举一个具体的例子,我想将参数one和two应用到test_A,但只提供参数one到test_B。当前代码@pytest.fixture(params=['one','two'])defdata(request):ifrequest.param=='one'data=5returndatadeftest_A(data):assertTruedeftest_B(data):assertTrue期望的结果我基本上想要这样的东西,但我不知道如何在pytest中正确编码:@pytest.fixture(params=['one',
我在尝试将pytest显示的所有结果保存到文件(txt、日志,无关紧要)时遇到问题。在下面的测试示例中,我想将控制台中显示的内容捕获到某种文本/日志文件中:importpytestimportosdeftest_func1():assertTruedeftest_func2():assert0==1if__name__=='__main__':pytest.main(args=['-sv',os.path.abspath(__file__)])我想将控制台输出保存到文本文件中:test-mbp:hi_worldua$pythontest_out.py==================
我只是想了解它是什么意思,或者如果我在pytest.mark.parametrize中将间接参数设置为True或False会发生什么?谢谢 最佳答案 使用indirect=True你可以参数化你的fixture,False-默认值。示例:importpytest@pytest.fixturedeffixture_name(request):returnrequest.param@pytest.mark.parametrize('fixture_name',['foo','bar'],indirect=True)deftest_ind
我正在使用pytest的参数化注释将参数传递到类中。我能够在测试方法中使用参数,但是,我不知道如何在setup_class方法中使用参数。importpytestparams=['A','B','C']@pytest.mark.parametrize('n',params)classTestFoo:defsetup_class(cls):print("setupclass:TestFoo")#Dosomesetupbasedonparamdeftest_something(self,n):assertn!='D'deftest_something_else(self,n):assert
我有高效的代码,可以在我的$HOME文件夹中创建配置文件,并在隔离环境中运行我的测试,我在conftest.py中修补了$HOME。我仍然不确定这是否普遍有效,也许不周到的书面测试功能可能会爆发。为了确保我的测试套件的有效性,我想对$HOME中的各个文件进行初步检查,并在运行测试套件后进行最终检查。如何使用pytest的“官方”方式实现这一点?我有一个肮脏的hack,它可以工作但会弄乱报告。我的测试套件现在是正确的,这个问题是出于好奇,因为我想了解更多关于pytest的信息。补充:同样的问题,但不同的用例:我想检查第3方插件是否满足版本要求。如果不是这种情况,我想显示一条消息并停止py