Search code examples
python-3.xpytestpython-unittesthamcrestpyhamcrest

Pytest fails when using pyhamcrest raises


Currently I have a test cases like the following:

    def test_foo(self):
        assert_that(self.target.do(), raises(FileNotFoundError))

Which passes using the standard python unittest framework, however if I change to use pytest, it fails. Switching to the pytest syntax works (as below), but why doesn't the pyhamcrest matcher work in this case?

    def test_foo(self):
        with pytest.raises(FileNotFoundError):
             self.target.do()

Solution

  • PyHamcrest's raises() matcher requires you to make the call with the calling() function - see the tutorial. So, in your case you'd want:

    assert_that(calling(self.target.do), raises(FileNotFoundError))