1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
from unittest import TestCase
from testfixtures import Replacer, ShouldRaise
class TestReplacer(TestCase):
def test_function(self):
from testfixtures.tests import sample1
assert sample1.z() == 'original z'
def test_z():
return 'replacement z'
r = Replacer()
r.replace('testfixtures.tests.sample1.z',test_z)
assert sample1.z() == 'replacement z'
r.restore()
assert sample1.z() == 'original z'
def test_class(self):
from testfixtures.tests import sample1
x = sample1.X()
assert x.__class__.__name__ == 'X'
class XReplacement(sample1.X): pass
r = Replacer()
r.replace('testfixtures.tests.sample1.X', XReplacement)
x = sample1.X()
assert x.__class__.__name__ == 'XReplacement'
assert sample1.X().y() == 'original y'
r.restore()
x = sample1.X()
assert x.__class__.__name__ == 'X'
def test_method(self):
from testfixtures.tests import sample1
assert sample1.X().y() == 'original y'
def test_y(self):
return 'replacement y'
r = Replacer()
r.replace('testfixtures.tests.sample1.X.y',test_y)
assert sample1.X().y()[:38] == 'replacement y'
r.restore()
assert sample1.X().y() == 'original y'
def test_class_method(self):
from testfixtures.tests import sample1
c = sample1.X
assert sample1.X.aMethod() is c
def rMethod(cls):
return cls, 1
r = Replacer()
r.replace('testfixtures.tests.sample1.X.aMethod',rMethod)
sample1.X.aMethod()
assert sample1.X.aMethod() == (c, 1)
r.restore()
sample1.X.aMethod()
assert sample1.X.aMethod() is c
def test_multiple_replace(self):
from testfixtures.tests import sample1
assert sample1.z() == 'original z'
assert sample1.X().y() == 'original y'
def test_y(self):
return self.__class__.__name__
def test_z():
return 'replacement z'
r = Replacer()
r.replace('testfixtures.tests.sample1.z',test_z)
r.replace('testfixtures.tests.sample1.X.y',test_y)
assert sample1.z() == 'replacement z'
assert sample1.X().y() == 'X'
r.restore()
assert sample1.z() == 'original z'
assert sample1.X().y() == 'original y'
def test_gotcha(self):
# Just because you replace an object in one context:
from testfixtures.tests import sample1
from testfixtures.tests import sample2
assert sample1.z() == 'original z'
def test_z():
return 'replacement z'
r = Replacer()
r.replace('testfixtures.tests.sample1.z',test_z)
assert sample1.z() == 'replacement z'
# Doesn't meant that it's replaced in all contexts:
assert sample2.z() == 'original z'
r.restore()
def test_remove_called_twice(self):
from testfixtures.tests import sample1
def test_z(): pass
r = Replacer()
r.replace('testfixtures.tests.sample1.z',test_z)
r.restore()
assert sample1.z() == 'original z'
r.restore()
assert sample1.z() == 'original z'
def test_with_statement(self):
from testfixtures.tests import sample1
assert sample1.z() == 'original z'
def test_z():
return 'replacement z'
with Replacer() as r:
r.replace('testfixtures.tests.sample1.z',test_z)
assert sample1.z() == 'replacement z'
assert sample1.z() == 'original z'
def test_not_there(self):
def test_bad(): pass
with Replacer() as r:
with ShouldRaise(AttributeError("Original 'bad' not found")):
r.replace('testfixtures.tests.sample1.bad', test_bad)
|