test_skipping.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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_decorators(self):
  27. op_table = ((unittest.skipUnless, False, True),
  28. (unittest.skipIf, True, False))
  29. for deco, do_skip, dont_skip in op_table:
  30. class Foo(unittest.TestCase):
  31. @deco(do_skip, "testing")
  32. def test_skip(self): pass
  33. @deco(dont_skip, "testing")
  34. def test_dont_skip(self): pass
  35. test_do_skip = Foo("test_skip")
  36. test_dont_skip = Foo("test_dont_skip")
  37. suite = unittest.TestSuite([test_do_skip, test_dont_skip])
  38. events = []
  39. result = LoggingResult(events)
  40. suite.run(result)
  41. self.assertEqual(len(result.skipped), 1)
  42. expected = ['startTest', 'addSkip', 'stopTest',
  43. 'startTest', 'addSuccess', 'stopTest']
  44. self.assertEqual(events, expected)
  45. self.assertEqual(result.testsRun, 2)
  46. self.assertEqual(result.skipped, [(test_do_skip, "testing")])
  47. self.assertTrue(result.wasSuccessful())
  48. def test_skip_class(self):
  49. @unittest.skip("testing")
  50. class Foo(unittest.TestCase):
  51. def test_1(self):
  52. record.append(1)
  53. record = []
  54. result = unittest.TestResult()
  55. test = Foo("test_1")
  56. suite = unittest.TestSuite([test])
  57. suite.run(result)
  58. self.assertEqual(result.skipped, [(test, "testing")])
  59. self.assertEqual(record, [])
  60. def test_skip_non_unittest_class_old_style(self):
  61. @unittest.skip("testing")
  62. class Mixin:
  63. def test_1(self):
  64. record.append(1)
  65. class Foo(Mixin, unittest.TestCase):
  66. pass
  67. record = []
  68. result = unittest.TestResult()
  69. test = Foo("test_1")
  70. suite = unittest.TestSuite([test])
  71. suite.run(result)
  72. self.assertEqual(result.skipped, [(test, "testing")])
  73. self.assertEqual(record, [])
  74. def test_skip_non_unittest_class_new_style(self):
  75. @unittest.skip("testing")
  76. class Mixin(object):
  77. def test_1(self):
  78. record.append(1)
  79. class Foo(Mixin, unittest.TestCase):
  80. pass
  81. record = []
  82. result = unittest.TestResult()
  83. test = Foo("test_1")
  84. suite = unittest.TestSuite([test])
  85. suite.run(result)
  86. self.assertEqual(result.skipped, [(test, "testing")])
  87. self.assertEqual(record, [])
  88. def test_expected_failure(self):
  89. class Foo(unittest.TestCase):
  90. @unittest.expectedFailure
  91. def test_die(self):
  92. self.fail("help me!")
  93. events = []
  94. result = LoggingResult(events)
  95. test = Foo("test_die")
  96. test.run(result)
  97. self.assertEqual(events,
  98. ['startTest', 'addExpectedFailure', 'stopTest'])
  99. self.assertEqual(result.expectedFailures[0][0], test)
  100. self.assertTrue(result.wasSuccessful())
  101. def test_unexpected_success(self):
  102. class Foo(unittest.TestCase):
  103. @unittest.expectedFailure
  104. def test_die(self):
  105. pass
  106. events = []
  107. result = LoggingResult(events)
  108. test = Foo("test_die")
  109. test.run(result)
  110. self.assertEqual(events,
  111. ['startTest', 'addUnexpectedSuccess', 'stopTest'])
  112. self.assertFalse(result.failures)
  113. self.assertEqual(result.unexpectedSuccesses, [test])
  114. self.assertTrue(result.wasSuccessful())
  115. def test_skip_doesnt_run_setup(self):
  116. class Foo(unittest.TestCase):
  117. wasSetUp = False
  118. wasTornDown = False
  119. def setUp(self):
  120. Foo.wasSetUp = True
  121. def tornDown(self):
  122. Foo.wasTornDown = True
  123. @unittest.skip('testing')
  124. def test_1(self):
  125. pass
  126. result = unittest.TestResult()
  127. test = Foo("test_1")
  128. suite = unittest.TestSuite([test])
  129. suite.run(result)
  130. self.assertEqual(result.skipped, [(test, "testing")])
  131. self.assertFalse(Foo.wasSetUp)
  132. self.assertFalse(Foo.wasTornDown)
  133. def test_decorated_skip(self):
  134. def decorator(func):
  135. def inner(*a):
  136. return func(*a)
  137. return inner
  138. class Foo(unittest.TestCase):
  139. @decorator
  140. @unittest.skip('testing')
  141. def test_1(self):
  142. pass
  143. result = unittest.TestResult()
  144. test = Foo("test_1")
  145. suite = unittest.TestSuite([test])
  146. suite.run(result)
  147. self.assertEqual(result.skipped, [(test, "testing")])
  148. if __name__ == '__main__':
  149. unittest.main()