Issue #10979. unittest stdout buffering now works with class and module setup and teardown.
diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py
index 3dc7154..44bf186 100644
--- a/Lib/unittest/result.py
+++ b/Lib/unittest/result.py
@@ -59,6 +59,9 @@
         "Called when the given test is about to be run"
         self.testsRun += 1
         self._mirrorOutput = False
+        self._setupStdout()
+
+    def _setupStdout(self):
         if self.buffer:
             if self._stderr_buffer is None:
                 self._stderr_buffer = io.StringIO()
@@ -74,6 +77,10 @@
 
     def stopTest(self, test):
         """Called when the given test has been run"""
+        self._restoreStdout()
+        self._mirrorOutput = False
+
+    def _restoreStdout(self):
         if self.buffer:
             if self._mirrorOutput:
                 output = sys.stdout.getvalue()
@@ -93,7 +100,6 @@
             self._stdout_buffer.truncate()
             self._stderr_buffer.seek(0)
             self._stderr_buffer.truncate()
-        self._mirrorOutput = False
 
     def stopTestRun(self):
         """Called once after all tests are executed.