首页 \ 问答 \ 如何测试该类__init__方法使用pytest中的fixture引发异常(Python)(How to test that class __init__ method raises exception using fixture in pytest (Python))

如何测试该类__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
更新时间:2022-04-21 11:04

最满意答案

我通过使用隐藏字段找到了解决方案。

<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) { ...
  • 在常规HTML
  • $("input[type='radio'][name='slug_tier_1']").attr("checked", true); 如果输入的名称在呈现的HTML中是相同的,则选择器应该是 $("input[type='radio'][name=' ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)