Skip to main content

Test utility for redefining functions

Project description

# Redef

To install, just run:

bash
python setup.py build
python setup.py install


See [test_redef.py](/joeheyming/redef/blob/master/test_redef.py) under your install path for examples.

Redef is intended to create lexically scoped 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.

python
import unittest
from redef import redef

class MyClass:
def lame_function(self):
return "something I don't want"

class 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.

python
class MyClass:
unpredictable = 'random string'

my_global_object = MyClass()

class MyTest(unittest.TestCase):
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:
* __init__:
* takes an object and a key. The rest of the arguments are kwargs:
* if the key doesn't exist in the object, an exception will be raised unless you provide kwargs must_exist
* value: if provided, this value will redefine the key in the object, otherwise you 'wiretap' the object
* must_call: if provided, when the Redef object is destroyed, it warns if this constraint is violated.

* 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 named_method_args back to the default state of 0, None, None

Redef also provides a freebie static function:

* redef(obj, key, value):
Static constructor of a Redef object

Where
* obj: is a Class, Module, or Object you want to temporariliy change
* key: The string name of the attribute you want to change
* value: The new value. If the value is None, you only capture called, method_args, and named_method_args
* The None case won't redefine the key on the obj

These static functions were provided 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 CapturedOutput:
* Has 2 variables you want: output, returned

* Static Functions that return a CapturedOutput:
* stdout_of(func, *args, **kwargs):
Call a function and capture the stdout.
Returns a CapturedOutput object 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 CapturedOutput object that has the stderr and the return value of calling func.

* wiretap:
* A static function that creates a Redef object only for the purpose of capturing the method_args and called values.
* The original functionality should remain the same.

Please ask any questions on github: http://github.com/joeheyming/redef/issues

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.3.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

redef-1.3.macosx-10.8-intel.exe (70.5 kB view details)

Uploaded Source

File details

Details for the file redef-1.3.tar.gz.

File metadata

  • Download URL: redef-1.3.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for redef-1.3.tar.gz
Algorithm Hash digest
SHA256 dfae4312802b53540ed854efac4efd71c164f196dfd24b60504d7766f758f925
MD5 5f8a6d6b1374525fb5512064ad3774f7
BLAKE2b-256 3b6aba1c53f1c8e80f2d5259898885f1223c3c0478467f0de4026f8faa2a71c9

See more details on using hashes here.

File details

Details for the file redef-1.3.macosx-10.8-intel.exe.

File metadata

File hashes

Hashes for redef-1.3.macosx-10.8-intel.exe
Algorithm Hash digest
SHA256 581c7a6a7418134c1d93af3efd264d4134b6297927dbb65a5146c5950f64f9ee
MD5 0935296e8ef312a01291504652223cf4
BLAKE2b-256 5dddf0aee80f8a5cb6aed6c0156ebf8557c9c96a48933b87a1ead9bc30f2f58d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page