xfail isn't just for pytest tests. Python's unittest has @unittest.expectedFailure.

In this episode, we cover:

  • using @unittest.expectedFailure
  • the results of passing and failing tests with expectedFailure
  • using pytest as a test runner for unittest
  • using pytest markers on unittest tests

Docs for expectedFailure:
 https://docs.python.org/3/library/unittest.html#skipping-tests-and-expected-failures

Some sample code. 
 unittest only:

import unittest

class ExpectedFailureTestCase(unittest.TestCase):

@unittest.expectedFailure
def test_fail(self):
    self.assertEqual(1, 0, "broken")

@unittest.expectedFailure
def test_pass(self):
    self.assertEqual(1, 1, "not broken")


unittest with pytest markers:

import unittest import pytest

class ExpectedFailureTestCase(unittest.TestCase):

@pytest.mark.xfail
def test_fail(self):
    self.assertEqual(1, 0, "broken")

@pytest.mark.xfail
def test_pass(self):
    self.assertEqual(1, 1, "not broken")