如何测试该类__init__方法使用pytest中的fixture引发异常(Python)(How to test that class __init__ method raises exception using fixture in pytest (Python))
我正在尝试使用pytest(单元测试)获得更多技能。
我尝试测试在没有must参数的情况下实例化类时是否引发异常。
我尝试为此创建一个fixture但是这会导致一个问题,当调用fixture时,它会尝试使用缺少的参数在其中创建类,并在pytest实际断言异常被引发之前引发我的异常。
我设法通过不使用fixture而只是在测试函数中实例化类来克服这个问题,但我想知道是否有更优雅的方法来使用fixture。
示例类:
class MyClass(object): def __init__(self, must_have_parameter=None): if not must_have_parameter: raise ValueError("must_have_parameter must be set.")
在测试中尝试使用此夹具时,我自然会收到错误。
@pytest.fixture() def bad_class_instantiation(): _bad_instance = MyClass() return _bad_instance
然后有一个测试:
def test_bad_instantiation(bad_class_instantiation): with pytest.raises(ValueError, message="must_have_parameter must be set."): bad_class_instantiation()
在测试用例运行之前,类会被实例化,这个测试失败了(这是我的解释)? 它仍然显示出现ValueError并显示自定义消息。
如果我将测试用例更改为:
def test_bad_instantiation(): with pytest.raises(ValueError, message="must_have_parameter must be set."): bad_instance = MyClass()
然后测试通过。
有没有办法使用夹具,或者我应该只调用测试函数中的类并调用它一天?
谢谢你的时间。
托马斯
I am trying to get some more skills with pytest (unit testing).
I try to test if an exception is raised when a class is instantiated without a must have parameter.
I tried to create a fixture for that but this leads to a problem that when the fixture is called it tries to create the class inside it with missing parameter and raises my exception before pytest actually asserts that the exception was raised.
I managed to overcome this by not using fixture and just instantiating the class inside the test function but I wonder if there is a more elegant way of using a fixture for that.
Example class:
class MyClass(object): def __init__(self, must_have_parameter=None): if not must_have_parameter: raise ValueError("must_have_parameter must be set.")
When trying to use this fixture in a test I naturally get an error.
@pytest.fixture() def bad_class_instantiation(): _bad_instance = MyClass() return _bad_instance
Then there is a test:
def test_bad_instantiation(bad_class_instantiation): with pytest.raises(ValueError, message="must_have_parameter must be set."): bad_class_instantiation()
This test fails as the class gets instantiated before the test case runs (That is my interpretation)? It still shows that a ValueError occured and the custom message gets displayed..
If I change the test case to:
def test_bad_instantiation(): with pytest.raises(ValueError, message="must_have_parameter must be set."): bad_instance = MyClass()
Then the test passes.
Is there a way of using a fixture for this or I should just call the class inside the test function and call it a day ?
Thanks for your time.
Tomasz
原文:https://stackoverflow.com/questions/46720199
最满意答案
我通过使用隐藏字段找到了解决方案。
<asp:HiddenField ID = "hfName" runat = "server" /> document.getElementById("<%=hfName.ClientID %>").value = recipient; string oldValue = Request.Form[hfName.UniqueID];
I found a solution by using a hidden field.
<asp:HiddenField ID = "hfName" runat = "server" /> document.getElementById("<%=hfName.ClientID %>").value = recipient; string oldValue = Request.Form[hfName.UniqueID];
相关问答
更多-
你试过给你的div一个id并从中得到attr吗? $("") .attr({ "id": "myid", "class": "line dataRow ProductSearchResultRow", //rest of it 然后在您的按钮上单击替换 $(this).attr( 同 $("#myid").attr( 虽然id需要确定,但你可能需要做类似的事情 $("") .attr({ "id": "myid_" + vProdLines[i]. ...
-
以下为我工作: 点击之前(编辑): 点击(编辑): 发布点击Url(编辑): 查看(索引): @Html.Partial("MACSerialPartial") $("#btn1").click(function () { $("#<%=hidden.ClientID %>").val("L1001"); }); protected void Button1_Click( Object sender, EventArgs e) { ...
-
在按钮上单击显示标签(on button click display a label)[2023-10-09]
在常规HTML -
$("input[type='radio'][name='slug_tier_1']").attr("checked", true); 如果输入的名称在呈现的HTML中是相同的,则选择器应该是 $("input[type='radio'][name=' ...