def run(self, test): """Run tests. :param test: A unittest TestSuite or TestClass. :returns: Test result Fires :func:`startTestRun` and :func:`stopTestRun` hooks. """ result = self._makeResult() executor = lambda suite, result: suite(result) startTime = time.time() event = events.StartTestRunEvent(self, test, result, startTime, executor) self.session.hooks.startTestRun(event) # allows startTestRun to modify test suite test = event.suite # ... and test execution executor = event.executeTests try: if not event.handled: executor(test, result) finally: stopTime = time.time() timeTaken = stopTime - startTime event = events.StopTestRunEvent(self, result, stopTime, timeTaken) self.session.hooks.stopTestRun(event) self.session.hooks.afterTestRun(event) return result
def test_mixed_layers_no_layers(self): class L1(object): pass class L2(L1): pass class T1(unittest.TestCase): layer = L1 def test(self): pass class T2(unittest.TestCase): layer = L2 def test(self): pass class T3(unittest.TestCase): def test(self): pass suite = unittest.TestSuite([T2('test'), T1('test'), T3('test')]) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = self._listset([ 'test (nose2.tests.unit.test_layers_plugin.T3)', [ 'test (nose2.tests.unit.test_layers_plugin.T1)', ['test (nose2.tests.unit.test_layers_plugin.T2)'] ] ]) self.assertEqual(self.names(event.suite), expect)
def test_simple_layer_inheritance(self): class L1(object): pass class L2(L1): pass class T1(unittest.TestCase): layer = L1 def test(self): pass class T2(unittest.TestCase): layer = L2 def test(self): pass suite = unittest.TestSuite([T2('test'), T1('test')]) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [[ 'test (nose2.tests.unit.test_layers_plugin.T1)', ['test (nose2.tests.unit.test_layers_plugin.T2)'] ]] self.assertEqual(self.names(event.suite), expect)
def test_mixin_in_inner_layer(self): class M1(object): pass class L1(object): pass class L2(L1): mixins = (M1,) class T1(unittest.TestCase): layer = L1 def test(self): pass class T2(unittest.TestCase): layer = L2 def test(self): pass suite = unittest.TestSuite([T1("test"), T2("test")]) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [ # L1 [ "test (nose2.tests.unit.test_layers_plugin.T1)", # M1 [["test (nose2.tests.unit.test_layers_plugin.T2)"]], # L2 ] ] self.assertEqual(self.names(event.suite), expect)
def test_mixed_layers_no_layers(self): class L1(object): pass class L2(L1): pass class T1(unittest.TestCase): layer = L1 def test(self): pass class T2(unittest.TestCase): layer = L2 def test(self): pass class T3(unittest.TestCase): def test(self): pass suite = unittest.TestSuite([T2("test"), T1("test"), T3("test")]) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [ "test (nose2.tests.unit.test_layers_plugin.T3)", [ "test (nose2.tests.unit.test_layers_plugin.T1)", ["test (nose2.tests.unit.test_layers_plugin.T2)"], ], ] self.assertEqual(self.names(event.suite), expect)
def test_start_test_run_filters_suite(self): self.plugin.attribs = ['a'] suite = unittest.TestSuite() suite.addTest(self.TC_1('test_a')) suite.addTest(self.TC_1('test_b')) event = events.StartTestRunEvent(None, suite, None, 1, None) self.session.hooks.startTestRun(event) self.assertEqual(len(event.suite._tests), 1) self.assertEqual(event.suite._tests[0]._testMethodName, 'test_a')
def test_mixin_in_top_layer(self): class M1(object): pass class L1(object): mixins = (M1,) class T1(unittest.TestCase): layer = L1 def test(self): pass suite = unittest.TestSuite([T1("test")]) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [[["test (nose2.tests.unit.test_layers_plugin.T1)"]]] # M1 # L1 # T1 self.assertEqual(self.names(event.suite), expect)
def test_invalid_top_layer(self): if sys.version_info >= (3, 0): # in python 3, L1 will automatically have `object` has base, so # this test does not make sense, and will actually fail. return class L1: pass class T1(unittest.TestCase): layer = L1 def test(self): pass suite = unittest.TestSuite([T1("test")]) event = events.StartTestRunEvent(None, suite, None, 0, None) with self.assertRaises(exceptions.LoadTestsFailure): self.plugin.startTestRun(event)
def test_deep_inheritance(self): class L1(object): pass class L2(L1): pass class L3(L1): pass class L4(L2, L1): pass class L5(L4): pass class T1(unittest.TestCase): layer = L1 def test(self): pass class T2(unittest.TestCase): layer = L2 def test(self): pass class T3(unittest.TestCase): layer = L3 def test(self): pass class T4(unittest.TestCase): layer = L4 def test(self): pass class T5(unittest.TestCase): layer = L5 def test(self): pass suite = unittest.TestSuite( [T2('test'), T1('test'), T3('test'), T4('test'), T5('test')]) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [[ 'test (nose2.tests.unit.test_layers_plugin.T1)', [ 'test (nose2.tests.unit.test_layers_plugin.T2)', [ 'test (nose2.tests.unit.test_layers_plugin.T4)', ['test (nose2.tests.unit.test_layers_plugin.T5)'] ] ], ['test (nose2.tests.unit.test_layers_plugin.T3)'] ]] self.assertEqual(self.names(event.suite), expect)
def test_mixin_inheritance(self): class L1(object): pass class L2(object): # a mixin, doesn't share a base w/L1 pass class L3(L1): pass class L4(L3): pass class L5(L4): pass class L6(L2): mixins = (L4, ) class T1(unittest.TestCase): layer = L1 def test(self): pass class T3(unittest.TestCase): layer = L3 def test(self): pass class T4(unittest.TestCase): layer = L4 def test(self): pass class T5(unittest.TestCase): layer = L5 def test(self): pass class T6(unittest.TestCase): layer = L6 def test(self): pass suite = unittest.TestSuite( [T6('test'), T1('test'), T3('test'), T4('test'), T5('test')]) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [[ 'test (nose2.tests.unit.test_layers_plugin.T1)', [ 'test (nose2.tests.unit.test_layers_plugin.T3)', [ 'test (nose2.tests.unit.test_layers_plugin.T4)', [['test (nose2.tests.unit.test_layers_plugin.T6)']], [ 'test (nose2.tests.unit.test_layers_plugin.T5)', ] ] ] ]] self.assertEqual(self.names(event.suite), expect)
def test_mixin_inheritance(self): # without mixin # L1 # -> L3 # -> L4 # -> L5 # L2 # -> L6 # # with mixin new behavior: # the mixin (L4, which comes with L3 and L1) # is inserted after the parent layer (L2). # L2 # -> L1 # -> L3 # -> L4 # -> L6 # -> L5 # # with mixin old behavior # the mixin (L4, which comes with L3 and L1) # is inserted before the parent layer (L2). # L1 # -> L3 # -> L4 # -> L2 # -> L6 # -> L5 class L1(object): pass class L2(object): # a mixin, doesn't share a base w/L1 pass class L3(L1): pass class L4(L3): pass class L5(L4): pass class L6(L2): mixins = (L4,) class T1(unittest.TestCase): layer = L1 def test(self): pass class T3(unittest.TestCase): layer = L3 def test(self): pass class T4(unittest.TestCase): layer = L4 def test(self): pass class T5(unittest.TestCase): layer = L5 def test(self): pass class T6(unittest.TestCase): layer = L6 def test(self): pass suite = unittest.TestSuite( [T6("test"), T1("test"), T3("test"), T4("test"), T5("test")] ) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [ # L2 [ # L1 [ "test (nose2.tests.unit.test_layers_plugin.T1)", # T1 # L3 [ "test (nose2.tests.unit.test_layers_plugin.T3)", # T3 # L4 [ "test (nose2.tests.unit.test_layers_plugin.T4)", # T4 # L5 ["test (nose2.tests.unit.test_layers_plugin.T5)"], # L6 ["test (nose2.tests.unit.test_layers_plugin.T6)"], ], ], ] ] ] self.assertEqual(self.names(event.suite), expect)
def test_ordered_layers(self): class L1(object): pass class L2(L1): position = 1 class L3(L1): position = 2 class L4(L1): position = 3 class L5(L2): position = 4 class T1(unittest.TestCase): layer = L1 def test(self): pass class T2(unittest.TestCase): layer = L2 def test(self): pass class T3(unittest.TestCase): layer = L3 def test(self): pass class T4(unittest.TestCase): layer = L4 def test(self): pass class T5(unittest.TestCase): layer = L5 def test(self): pass suite = unittest.TestSuite( [T2("test"), T1("test"), T3("test"), T4("test"), T5("test")] ) event = events.StartTestRunEvent(None, suite, None, 0, None) self.plugin.startTestRun(event) expect = [ [ "test (nose2.tests.unit.test_layers_plugin.T1)", [ "test (nose2.tests.unit.test_layers_plugin.T2)", ["test (nose2.tests.unit.test_layers_plugin.T5)"], ], ["test (nose2.tests.unit.test_layers_plugin.T3)"], ["test (nose2.tests.unit.test_layers_plugin.T4)"], ] ] self.assertEqual(self.names(event.suite), expect)