1
# Copyright (c) 2008 Jonathan M. Lange. See LICENSE for details.
3
"""Test TestResults and related things."""
9
from pyunit3k import ITestResult, MultiTestResult, TestCase, TestResult
10
from pyunit3k.tests.helpers import LoggingResult
13
class TestTestResult(TestCase):
14
"""Tests for `TestResult`."""
17
"""Make an arbitrary result for testing."""
21
# `TestResult` has a `done` method that, by default, does nothing.
22
self.makeResult().done()
24
def test_interface(self):
25
# pyunit3k's `TestResult` implements `ITestResult`.
27
ITestResult.providedBy(self.makeResult()),
28
'ITestResult not provided by TestResult')
31
class TestMultiTestResult(TestCase):
32
"""Tests for `MultiTestResult`."""
35
self.result1 = LoggingResult([])
36
self.result2 = LoggingResult([])
37
self.multiResult = MultiTestResult(self.result1, self.result2)
39
def assertResultLogsEqual(self, expectedEvents):
40
"""Assert that our test results have received the expected events."""
41
self.assertEqual(expectedEvents, self.result1._events)
42
self.assertEqual(expectedEvents, self.result2._events)
44
def makeExceptionInfo(self, exceptionFactory, *args, **kwargs):
46
raise exceptionFactory(*args, **kwargs)
51
# Initializing a `MultiTestResult` doesn't do anything to its
53
self.assertResultLogsEqual([])
55
def test_startTest(self):
56
# Calling `startTest` on a `MultiTestResult` calls `startTest` on all
58
self.multiResult.startTest(self)
59
self.assertResultLogsEqual([('startTest', self)])
61
def test_stopTest(self):
62
# Calling `stopTest` on a `MultiTestResult` calls `stopTest` on all
64
self.multiResult.stopTest(self)
65
self.assertResultLogsEqual([('stopTest', self)])
67
def test_addSuccess(self):
68
# Calling `addSuccess` on a `MultiTestResult` calls `addSuccess` on
69
# all its `TestResult`s.
70
self.multiResult.addSuccess(self)
71
self.assertResultLogsEqual([('addSuccess', self)])
74
# Calling `done` on a `MultiTestResult` calls `done` on all its
76
self.multiResult.done()
77
self.assertResultLogsEqual([('done')])
79
def test_addFailure(self):
80
# Calling `addFailure` on a `MultiTestResult` calls `addFailure` on
81
# all its `TestResult`s.
82
exc_info = self.makeExceptionInfo(AssertionError, 'failure')
83
self.multiResult.addFailure(self, exc_info)
84
self.assertResultLogsEqual([('addFailure', self, exc_info)])
86
def test_addError(self):
87
# Calling `addError` on a `MultiTestResult` calls `addError` on all
89
exc_info = self.makeExceptionInfo(RuntimeError, 'error')
90
self.multiResult.addError(self, exc_info)
91
self.assertResultLogsEqual([('addError', self, exc_info)])
95
from unittest import TestLoader
96
return TestLoader().loadTestsFromName(__name__)