Pytest Testing Idioms: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 26: Line 26:
     with pytest.raises(ValueError) as info:
     with pytest.raises(ValueError) as info:
         my_method()
         my_method()
    # important: interaction with 'info' must take place outside the with block
     assert info.value.args[0] == "some message"
     assert info.value.args[0] == "some message"
     assert "some message" in str(info.value)
     assert "some message" in str(info.value)
</syntaxhighlight>
</syntaxhighlight>
Also see: {{Internal|Python_Language_Exceptions#Overview|Python Language &#124; Exceptions}}
Also see: {{Internal|Python_Language_Exceptions#Overview|Python Language &#124; Exceptions}}

Revision as of 01:34, 17 February 2022

External

Internal

Overview

Tested Code is Supposed to Throw Exception

import pytest

def test_something_that_should_throw_exception():
    with pytest.raises(Exception) as info:
        my_method()

If the tested code raises a more specific exception, you can use that instead:

def test_something_that_should_throw_exception():
    with pytest.raises(ValueError) as info:
        my_method()

This tests the exception arguments:

def test_something_that_should_throw_exception():
    with pytest.raises(ValueError) as info:
        my_method()
    # important: interaction with 'info' must take place outside the with block
    assert info.value.args[0] == "some message"
    assert "some message" in str(info.value)

Also see:

Python Language | Exceptions