I'm not sure I really understand what's going on in order_by_bases. I guess it always put the base classes before their children. It doesn't order layers between them, though.
The following patch puts the unittest layer first, but I suspect there may be a better fix:
=== modified file 'src/zope/testing/testrunner/runner.py'
--- src/zope/testing/testrunner/runner.py 2009-10-07 17:53:44 +0000
+++ src/zope/testing/testrunner/runner.py 2009-10-08 06:56:29 +0000
@@ -101,7 +101,12 @@
def ordered_layers(self): layer_names = dict([(layer_from_name(layer_name), layer_name) for layer_name in self.tests_by_layer_name])
- for layer in order_by_bases(layer_names):
+ from zope.testing.testrunner.layer import UnitTests
+ layers = order_by_bases(layer_names)
+ if UnitTests in layers and layers.index(UnitTests):
+ layers.remove(UnitTests)
+ layers.insert(0, UnitTests)
+ for layer in layers: layer_name = layer_names[layer]
yield layer_name, layer, self.tests_by_layer_name[layer_name]
I'm not sure I really understand what's going on in order_by_bases. I guess it always put the base classes before their children. It doesn't order layers between them, though.
The following patch puts the unittest layer first, but I suspect there may be a better fix:
=== modified file 'src/zope/ testing/ testrunner/ runner. py' testing/ testrunner/ runner. py 2009-10-07 17:53:44 +0000 testing/ testrunner/ runner. py 2009-10-08 06:56:29 +0000 layers( self):
layer_ names = dict([( layer_from_ name(layer_ name), layer_name)
for layer_name in self.tests_ by_layer_ name]) bases(layer_ names): testrunner. layer import UnitTests bases(layer_ names) index(UnitTests ): remove( UnitTests)
layer_ name = layer_names[layer] by_layer_ name[layer_ name]
--- src/zope/
+++ src/zope/
@@ -101,7 +101,12 @@
def ordered_
- for layer in order_by_
+ from zope.testing.
+ layers = order_by_
+ if UnitTests in layers and layers.
+ layers.
+ layers.insert(0, UnitTests)
+ for layer in layers:
yield layer_name, layer, self.tests_