Test utility for redefining functions
Project description
To install, just run:
python ./setup.py build
python ./setup.py install
See test_redef.py under your install path for examples.
Redef is inteded to create lexically scope variables that when destroyed undo mock behavior.
It was inspired by a perl module, Test::Resub - http://search.cpan.org/~airwave/Test-Resub-1.02/lib/Test/Resub.pm
The best examples use unittest, but it should work with any testing framework.
import unittest
from redef import redef
class MyClass:
def lame_function(self):
return "something I don't want"
def MyTest(unittest.TestCase):
def test1(self):
myobj = MyClass()
self.assertEqual(myobj.lame_function(), "something I don't want")
want = 'something I want'
rd_lf = redef(MyClass, 'lame_function', lambda s: want)
self.assertEqual(myobj.lame_function(), want)
# after test1, rd_lf gets deleted and resets
def test2(self):
myobj = MyClass()
# test2 is uneffected by test1
self.assertEqual(myobj.lame_function(), "something I don't want")
This doesn't have to be a function, you can also redefine attributes directly on an object.
class MyClass:
unpredictable = 'random string'
my_global_object = MyClass()
...
def test3(self):
rd_u = redef(my_global_object, 'unpredictable', 'unit testable string')
# ... test something awesome!
self.assertEqual(my_global_object.unpredictable, 'unit testable string')
def test4(self):
# hey, my_global_object is back to being unpredictable
self.assertEqual(my_global_object.unpredictable, 'unpredictable')
There are other useful functions provided on the redef object itself:
Class Redef:
called():
Stores how many times a redef'd function was called.
method_args():
Stores the most recent *args to the redef'd function.
named_method_args():
Stores the most recent **kwargs to the redef'd function.
reset():
Sets called, method_args, and name_method_args back to the default state of 0, None, None
Redef also provides a freebie static functions:
redef(obj, key, value):
Static constructor of a Redef object
# these static functions were provieded to show the usefulness of redef:
# for example, you could capture stdout of a function call, and after capturing it,
# sys.stdout goes back to normal
Class WriteCapturer:
Has 2 variables you want: output, returned
stdout_of(func, *args, **kwargs):
Call a function and capture the stdout
Returns a WriteCapturerobject that has the stdout and the return value of calling func
stderr_of(func, *args, **kwargs):
Call a function and capture the stderr
Returns a WriteCapturerobject that has the stderr and the return value of calling func
python ./setup.py build
python ./setup.py install
See test_redef.py under your install path for examples.
Redef is inteded to create lexically scope variables that when destroyed undo mock behavior.
It was inspired by a perl module, Test::Resub - http://search.cpan.org/~airwave/Test-Resub-1.02/lib/Test/Resub.pm
The best examples use unittest, but it should work with any testing framework.
import unittest
from redef import redef
class MyClass:
def lame_function(self):
return "something I don't want"
def MyTest(unittest.TestCase):
def test1(self):
myobj = MyClass()
self.assertEqual(myobj.lame_function(), "something I don't want")
want = 'something I want'
rd_lf = redef(MyClass, 'lame_function', lambda s: want)
self.assertEqual(myobj.lame_function(), want)
# after test1, rd_lf gets deleted and resets
def test2(self):
myobj = MyClass()
# test2 is uneffected by test1
self.assertEqual(myobj.lame_function(), "something I don't want")
This doesn't have to be a function, you can also redefine attributes directly on an object.
class MyClass:
unpredictable = 'random string'
my_global_object = MyClass()
...
def test3(self):
rd_u = redef(my_global_object, 'unpredictable', 'unit testable string')
# ... test something awesome!
self.assertEqual(my_global_object.unpredictable, 'unit testable string')
def test4(self):
# hey, my_global_object is back to being unpredictable
self.assertEqual(my_global_object.unpredictable, 'unpredictable')
There are other useful functions provided on the redef object itself:
Class Redef:
called():
Stores how many times a redef'd function was called.
method_args():
Stores the most recent *args to the redef'd function.
named_method_args():
Stores the most recent **kwargs to the redef'd function.
reset():
Sets called, method_args, and name_method_args back to the default state of 0, None, None
Redef also provides a freebie static functions:
redef(obj, key, value):
Static constructor of a Redef object
# these static functions were provieded to show the usefulness of redef:
# for example, you could capture stdout of a function call, and after capturing it,
# sys.stdout goes back to normal
Class WriteCapturer:
Has 2 variables you want: output, returned
stdout_of(func, *args, **kwargs):
Call a function and capture the stdout
Returns a WriteCapturerobject that has the stdout and the return value of calling func
stderr_of(func, *args, **kwargs):
Call a function and capture the stderr
Returns a WriteCapturerobject that has the stderr and the return value of calling func
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
redef-1.0.tar.gz
(2.6 kB
view details)
File details
Details for the file redef-1.0.tar.gz
.
File metadata
- Download URL: redef-1.0.tar.gz
- Upload date:
- Size: 2.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d02082a5c8f3f597d09eca81d5d93d19f3d5f130a18053c41f8423687458fad5 |
|
MD5 | 264ed9f3341c75245dcc183eef796099 |
|
BLAKE2b-256 | 3052e64d8fbab295d4bee24a177dd3e6e78efc1615bd71c7077248ef6f202d2a |