redef

Test utility for redefining functions
Download

redef Ranking & Summary

Advertisement

  • Rating:
  • License:
  • GPL v3
  • Price:
  • FREE
  • Publisher Name:
  • Joe Heyming
  • Publisher web site:
  • http://github.com/joeheyming/

redef Tags


redef Description

redef is a Python test utility for redefining functions.To install, just run:python ./setup.py buildpython ./setup.py installSee 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.pmThe best examples use unittest, but it should work with any testing framework.import unittestfrom redef import redefclass 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, NoneRedef 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 normalClass WriteCapturer: Has 2 variables you want: output, returnedstdout_of(func, *args, **kwargs): Call a function and capture the stdout Returns a WriteCapturerobject that has the stdout and the return value of calling funcstderr_of(func, *args, **kwargs): Call a function and capture the stderr Returns a WriteCapturerobject that has the stderr and the return value of calling funcProduct's homepage


redef Related Software