PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Wednesday, April 27, 2022

[FIXED] How to use pytest to assert NO Warning is raised

 April 27, 2022     pytest, python, python-3.x, unit-testing, warnings     No comments   

Issue

I want to ensure that no warning at all is raised in one assertion.

Could not find any explicit answer in pytest documentation about warnings.

I've tried this, thinking maybe None would mean "nothing":

def test_AttrStr_parse_warnings():
    """Check _AttrStr.parse() raises proper warnings in proper cases."""
    with pytest.warns(None):
        _AttrStr('').parse()

but this assertion is also always correct, for instance, the test does not fail, even if a warning is actually raised:

def test_AttrStr_parse_warnings():
    """Check _AttrStr.parse() raises proper warnings in proper cases."""
    with pytest.warns(None):
        _AttrStr('').parse()
        warnings.warn('any message')

Solution

For pytest >= 7.0

The doc now explicitely mentions this case should be solved this way (without pytest):

with warnings.catch_warnings():
    warnings.simplefilter("error")
    ...

though this may not completely solve some cases (dynamic checks: see this post).

The solution suggested for pytest < 7.0, below, now raises a DeprecationWarning. Thanks to @Warren-Weckesser for signaling this in comment!

Possible solution for pytest < 7.0

Yet it was not planned to be used like this, it's possible to "record" any possible warning raised, and use this to add another assertion to ensure the number of raised warnings is 0:

def test_AttrStr_parse_warnings():
    """Check parse() raises proper warnings in proper cases."""
    with pytest.warns(None) as record:
        _AttrStr('').parse()
    assert len(record) == 0

To ensure it works: adding warnings.warn('any message') in the second assertion let the test fail.



Answered By - zezollo
Answer Checked By - David Goodson (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing