我正在使用该pytest
框架为 python 应用程序编写一些测试。我在其中一项测试中遇到问题,我不确定它的工作方式。
例子:
@pytest.mark.parametrize("result, status, xml_err, xml_status",[
("PASS",True,False,"XML_ERROR"),
("Validation error", False, False, "XML_ERROR")
])
def test_xml_build_neg(self, monkeypatch,result, status, xml_err, xml_status):
def validate(self):
return status, result, {}
def transform(self, v_dict):
return "<xml/>", 50.0, xml_status, xml_err
monkeypatch.setattr(DataValidator, "validate", validate)
monkeypatch.setattr(XMLTransformer, "transform", transform)
o_result, o_status, o_xml_err, o_xml_status= XMLOutputBuilder().build(ExtractionResult(), "test", b"test")
assert o_result == result, "Validation results not matching"
assert o_status == status, "Validation Status not matching"
.....
我做monkeypatch
了一些我内部的方法XMLOutputBuilder
来测试一些错误场景。我希望我的模拟方法会根据传入的参数返回值,但事实并非如此。我理解这种行为是因为模拟和固定装置只加载一次并且不能进一步更改(如果我错了,请纠正我)。
有没有其他方法可以使这种情况起作用?或者我必须为参数编写单独的测试方法?