Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> writes: > def test_spam(self): > for i in range(100): > for j in range(100): > with self.subtest(i=i, j=j): > if (i, j) != (97, 83): > self.assertEqual(spam(i, j), 999) > > > but is there a nicer way to mark a specific subtest as an expected > failure?
Expected failures and subtests are apparently not easily mixed using the current API. Digging into the ‘unittest.case’ module, the ‘expectedFailure’ decorator does its job by setting the test case's ‘__unittest_expecting_failure__’ attribute to ‘True’. Perhaps you can get the subtest object from the context manager, and decide to set that magic attribute:: # … with self.subtest(i=i, j=j) as subtest: if (i, j) == (97, 83): # The inhabitants of (97, 83) have always been trouble. subtest.__unittest_expecting_failure__ = True self.assertEqual(spam(i, j), 999) That attribute is undocumented though, so I don't know whether to consider that a nasty hack or a clever one. (Nor do I know whether it works as I expect.) You would be justified to report a bug that this interaction of useful features should really be easier to access. -- \ “Try adding “as long as you don't breach the terms of service – | `\ according to our sole judgement” to the end of any cloud | _o__) computing pitch.” —Simon Phipps, 2010-12-11 | Ben Finney -- https://mail.python.org/mailman/listinfo/python-list