PageRenderTime 39ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/Lib/unittest/test/test_skipping.py

https://gitlab.com/unofficial-mirrors/cpython
Python | 260 lines | 225 code | 26 blank | 9 comment | 9 complexity | e7531b05c5f6be66a83ab864f749e446 MD5 | raw file
  1. import unittest
  2. from unittest.test.support import LoggingResult
  3. class Test_TestSkipping(unittest.TestCase):
  4. def test_skipping(self):
  5. class Foo(unittest.TestCase):
  6. def test_skip_me(self):
  7. self.skipTest("skip")
  8. events = []
  9. result = LoggingResult(events)
  10. test = Foo("test_skip_me")
  11. test.run(result)
  12. self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
  13. self.assertEqual(result.skipped, [(test, "skip")])
  14. # Try letting setUp skip the test now.
  15. class Foo(unittest.TestCase):
  16. def setUp(self):
  17. self.skipTest("testing")
  18. def test_nothing(self): pass
  19. events = []
  20. result = LoggingResult(events)
  21. test = Foo("test_nothing")
  22. test.run(result)
  23. self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
  24. self.assertEqual(result.skipped, [(test, "testing")])
  25. self.assertEqual(result.testsRun, 1)
  26. def test_skipping_subtests(self):
  27. class Foo(unittest.TestCase):
  28. def test_skip_me(self):
  29. with self.subTest(a=1):
  30. with self.subTest(b=2):
  31. self.skipTest("skip 1")
  32. self.skipTest("skip 2")
  33. self.skipTest("skip 3")
  34. events = []
  35. result = LoggingResult(events)
  36. test = Foo("test_skip_me")
  37. test.run(result)
  38. self.assertEqual(events, ['startTest', 'addSkip', 'addSkip',
  39. 'addSkip', 'stopTest'])
  40. self.assertEqual(len(result.skipped), 3)
  41. subtest, msg = result.skipped[0]
  42. self.assertEqual(msg, "skip 1")
  43. self.assertIsInstance(subtest, unittest.TestCase)
  44. self.assertIsNot(subtest, test)
  45. subtest, msg = result.skipped[1]
  46. self.assertEqual(msg, "skip 2")
  47. self.assertIsInstance(subtest, unittest.TestCase)
  48. self.assertIsNot(subtest, test)
  49. self.assertEqual(result.skipped[2], (test, "skip 3"))
  50. def test_skipping_decorators(self):
  51. op_table = ((unittest.skipUnless, False, True),
  52. (unittest.skipIf, True, False))
  53. for deco, do_skip, dont_skip in op_table:
  54. class Foo(unittest.TestCase):
  55. @deco(do_skip, "testing")
  56. def test_skip(self): pass
  57. @deco(dont_skip, "testing")
  58. def test_dont_skip(self): pass
  59. test_do_skip = Foo("test_skip")
  60. test_dont_skip = Foo("test_dont_skip")
  61. suite = unittest.TestSuite([test_do_skip, test_dont_skip])
  62. events = []
  63. result = LoggingResult(events)
  64. suite.run(result)
  65. self.assertEqual(len(result.skipped), 1)
  66. expected = ['startTest', 'addSkip', 'stopTest',
  67. 'startTest', 'addSuccess', 'stopTest']
  68. self.assertEqual(events, expected)
  69. self.assertEqual(result.testsRun, 2)
  70. self.assertEqual(result.skipped, [(test_do_skip, "testing")])
  71. self.assertTrue(result.wasSuccessful())
  72. def test_skip_class(self):
  73. @unittest.skip("testing")
  74. class Foo(unittest.TestCase):
  75. def test_1(self):
  76. record.append(1)
  77. record = []
  78. result = unittest.TestResult()
  79. test = Foo("test_1")
  80. suite = unittest.TestSuite([test])
  81. suite.run(result)
  82. self.assertEqual(result.skipped, [(test, "testing")])
  83. self.assertEqual(record, [])
  84. def test_skip_non_unittest_class(self):
  85. @unittest.skip("testing")
  86. class Mixin:
  87. def test_1(self):
  88. record.append(1)
  89. class Foo(Mixin, unittest.TestCase):
  90. pass
  91. record = []
  92. result = unittest.TestResult()
  93. test = Foo("test_1")
  94. suite = unittest.TestSuite([test])
  95. suite.run(result)
  96. self.assertEqual(result.skipped, [(test, "testing")])
  97. self.assertEqual(record, [])
  98. def test_expected_failure(self):
  99. class Foo(unittest.TestCase):
  100. @unittest.expectedFailure
  101. def test_die(self):
  102. self.fail("help me!")
  103. events = []
  104. result = LoggingResult(events)
  105. test = Foo("test_die")
  106. test.run(result)
  107. self.assertEqual(events,
  108. ['startTest', 'addExpectedFailure', 'stopTest'])
  109. self.assertEqual(result.expectedFailures[0][0], test)
  110. self.assertTrue(result.wasSuccessful())
  111. def test_expected_failure_with_wrapped_class(self):
  112. @unittest.expectedFailure
  113. class Foo(unittest.TestCase):
  114. def test_1(self):
  115. self.assertTrue(False)
  116. events = []
  117. result = LoggingResult(events)
  118. test = Foo("test_1")
  119. test.run(result)
  120. self.assertEqual(events,
  121. ['startTest', 'addExpectedFailure', 'stopTest'])
  122. self.assertEqual(result.expectedFailures[0][0], test)
  123. self.assertTrue(result.wasSuccessful())
  124. def test_expected_failure_with_wrapped_subclass(self):
  125. class Foo(unittest.TestCase):
  126. def test_1(self):
  127. self.assertTrue(False)
  128. @unittest.expectedFailure
  129. class Bar(Foo):
  130. pass
  131. events = []
  132. result = LoggingResult(events)
  133. test = Bar("test_1")
  134. test.run(result)
  135. self.assertEqual(events,
  136. ['startTest', 'addExpectedFailure', 'stopTest'])
  137. self.assertEqual(result.expectedFailures[0][0], test)
  138. self.assertTrue(result.wasSuccessful())
  139. def test_expected_failure_subtests(self):
  140. # A failure in any subtest counts as the expected failure of the
  141. # whole test.
  142. class Foo(unittest.TestCase):
  143. @unittest.expectedFailure
  144. def test_die(self):
  145. with self.subTest():
  146. # This one succeeds
  147. pass
  148. with self.subTest():
  149. self.fail("help me!")
  150. with self.subTest():
  151. # This one doesn't get executed
  152. self.fail("shouldn't come here")
  153. events = []
  154. result = LoggingResult(events)
  155. test = Foo("test_die")
  156. test.run(result)
  157. self.assertEqual(events,
  158. ['startTest', 'addSubTestSuccess',
  159. 'addExpectedFailure', 'stopTest'])
  160. self.assertEqual(len(result.expectedFailures), 1)
  161. self.assertIs(result.expectedFailures[0][0], test)
  162. self.assertTrue(result.wasSuccessful())
  163. def test_unexpected_success(self):
  164. class Foo(unittest.TestCase):
  165. @unittest.expectedFailure
  166. def test_die(self):
  167. pass
  168. events = []
  169. result = LoggingResult(events)
  170. test = Foo("test_die")
  171. test.run(result)
  172. self.assertEqual(events,
  173. ['startTest', 'addUnexpectedSuccess', 'stopTest'])
  174. self.assertFalse(result.failures)
  175. self.assertEqual(result.unexpectedSuccesses, [test])
  176. self.assertFalse(result.wasSuccessful())
  177. def test_unexpected_success_subtests(self):
  178. # Success in all subtests counts as the unexpected success of
  179. # the whole test.
  180. class Foo(unittest.TestCase):
  181. @unittest.expectedFailure
  182. def test_die(self):
  183. with self.subTest():
  184. # This one succeeds
  185. pass
  186. with self.subTest():
  187. # So does this one
  188. pass
  189. events = []
  190. result = LoggingResult(events)
  191. test = Foo("test_die")
  192. test.run(result)
  193. self.assertEqual(events,
  194. ['startTest',
  195. 'addSubTestSuccess', 'addSubTestSuccess',
  196. 'addUnexpectedSuccess', 'stopTest'])
  197. self.assertFalse(result.failures)
  198. self.assertEqual(result.unexpectedSuccesses, [test])
  199. self.assertFalse(result.wasSuccessful())
  200. def test_skip_doesnt_run_setup(self):
  201. class Foo(unittest.TestCase):
  202. wasSetUp = False
  203. wasTornDown = False
  204. def setUp(self):
  205. Foo.wasSetUp = True
  206. def tornDown(self):
  207. Foo.wasTornDown = True
  208. @unittest.skip('testing')
  209. def test_1(self):
  210. pass
  211. result = unittest.TestResult()
  212. test = Foo("test_1")
  213. suite = unittest.TestSuite([test])
  214. suite.run(result)
  215. self.assertEqual(result.skipped, [(test, "testing")])
  216. self.assertFalse(Foo.wasSetUp)
  217. self.assertFalse(Foo.wasTornDown)
  218. def test_decorated_skip(self):
  219. def decorator(func):
  220. def inner(*a):
  221. return func(*a)
  222. return inner
  223. class Foo(unittest.TestCase):
  224. @decorator
  225. @unittest.skip('testing')
  226. def test_1(self):
  227. pass
  228. result = unittest.TestResult()
  229. test = Foo("test_1")
  230. suite = unittest.TestSuite([test])
  231. suite.run(result)
  232. self.assertEqual(result.skipped, [(test, "testing")])
  233. if __name__ == "__main__":
  234. unittest.main()