cirossmonteiro

python test decorator

Nov 13th, 2021 (edited)
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.53 KB | None | 0 0
  1. def test_params(*params, **kwparams):
  2.     print('test params: ', params, kwparams)
  3.     def decorator(function_results):
  4.         function, result = function_results
  5.         size, args, kwargs = len(result), [], []
  6.         print('number of test cases: ', size)
  7.        
  8.         for index in range(size):
  9.             arg = []
  10.             for value in [param[index] for param in params]:
  11.                 if value != None:
  12.                     arg.append(value)
  13.             args.append(arg)
  14.  
  15.             kwarg = {}
  16.             for key, value in kwparams.items():
  17.                 value = kwparams[key][index]
  18.                 if value != None:
  19.                     kwarg[key] = value
  20.             kwargs.append(kwarg)
  21.  
  22.         for index in range(size):
  23.             computed = function(*args[index], **kwargs[index])
  24.             if computed != result[index]:
  25.                 raise AssertionError(f"Test case: args={args[index]} kwargs={kwargs[index]}, return={computed} != {result[index]}")
  26.            
  27.         return function
  28.     return decorator
  29.  
  30. def test_results(*results):
  31.     print('test results: ', results)
  32.     def decorator(function):
  33.         return function, results
  34.     return decorator
  35.  
  36. # goal: test values when initializing function with decorator
  37. @test_params([1, 2, 3], [4, None, 6], z=[2 , 2, None])
  38. @test_results(7, 4, 9)
  39. def add(*args, **kwargs):
  40.     result = sum(args + tuple(kwargs.values()))
  41.     print('add: ', args, kwargs, result)
  42.     return result
  43.  
  44. print('after definition')
  45. add(12,23, q=12)
  46. add(43,46, w=1233)
  47.  
Add Comment
Please, Sign In to add comment