Previously we tested that the
returns the given URL if it’s a valid URL. If the given URL is not valid then
validate_url() is supposed to raise a
To test this we need to use pytest.raises().
Here is a test that expects
validate_url() to raise a
def test_validate_url_rejects_urls_without_domains(): with pytest.raises(ValueError): validate_url('http:///path')
This test will fail if the block of code inside the
with statement doesn’t
ValueError, otherwise the test will pass.
It’s often a good idea to use the
match argument to
ensure that the exception raised was the one you expected, and not some other
exception of the same class.
match is a regular expression that has to match
against the string representation of the exception or the test will fail:
def test_validate_url_rejects_urls_without_domains(): with pytest.raises(ValueError, match="^Not a valid URL\: .*"): validate_url('http:///path')
Alternatively, if your code raises a specific custom exception class
match may be unnecessary because that type of exception wouldn’t be
raised for any other reason.
pytest.warns(), for testing that code raises a warning
in the same way.
Testing that a certain message was logged works differently: use pytest’s builtin