Skip to content

build simple tests to validate functions with configurable args, kwargs and user inputs

License

Notifications You must be signed in to change notification settings

pbacellar/didatictests

 
 

Repository files navigation

didatictests

PyPI version shields.io PyPI version shields.io PyPI pyversions Commits GitHub latest commit License

Build Status Documentation Code Coverage


Features

  • Run functions with preconfigured simulated keyboard inputs

  • Build simple tests to validate functions prints and outputs with configurable args, kwargs and simulated user inputs

Installation

Stable Release: pip install didatictests
Development Head: pip install git+https://github.com/lmkawakami/didatictests.git

Documentation

Notebook showcase em português

Notebook de funcionalidades extras em português

For full package documentation please visit lmkawakami.github.io/didatictests.

Quick Start

from didatictests import Didatic_test

Demo function: the_function(arg):

  • receives 1 argument arg
  • receives 1 user input inp
  • calculates total = arg + int(inp)
  • prints total
  • return total
def the_function(arg):
    inp = input("One number, please: ")
    total = arg + int(inp)
    print(total)
    return total

Create and run some tests:


Test-1

test1 = Didatic_test(
    fn = the_function,
    args = Dt.parse_args(40),
    keyboard_inputs = ('2'),
    test_name = 'This one shall pass!',
    expected_output = 42,
    expected_prints = '42\n',
    run_prints_test = True,
    run_output_test = True,
    verbose=True
)

test1.run()
  • print:
Case: This one shall pass!
[I]: One number, please:  2
[P]: 42

outputs: ✔️  prints: ✔️
---------------------------------------------------
  • return:
{'output_is_correct': True, 'print_is_correct': True, 'test_failed': False, 'test_done': True}

Test-2

test2 = Didatic_test(
    fn = the_function,
    args = Dt.parse_args(40),
    keyboard_inputs = ('2'),
    test_name = 'You Shall Not Pass!!!',
    expected_output = 42,
    expected_prints = '13\n',
    run_prints_test = True,
    run_output_test = True,
    verbose=True
)

test2.run()
  • print:
Case: You Shall Not Pass!!!
[I]: One number, please:  2
[P]: 42

outputs: ✔️  prints: ❌
   ➖ Function args:      (40,) {}
   ➖ Keyboard inputs:    ('2',)
   ✔️ Function outputs:   42
   ➖ Expected output:    42
   ❌ fn internal prints: 42
   ➖ Expected prints:    13
---------------------------------------------------
  • return:
{'output_is_correct': True, 'print_is_correct': False, 'test_failed': False, 'test_done': True}

Test-3

test3 = Didatic_test(
    fn = the_function,
    args = Dt.parse_args('forty'),
    keyboard_inputs = ('two'),
    test_name = 'Error demo',
    expected_output = 42,
    expected_prints = '42\n',
    run_prints_test = True,
    run_output_test = True,
    verbose=True
)

test3.run()
  • print:
Case: Error demo
🚨⚠️🚨⚠️🚨 Error! 💀💀💀
<class 'ValueError'>
("invalid literal for int() with base 10: 'two'",)
invalid literal for int() with base 10: 'two'
[I]: One number, please:  two

---------------------------------------------------
  • return:
{'output_is_correct': False, 'print_is_correct': False, 'test_failed': True, 'test_done': False}

Development

See CONTRIBUTING.md for information related to developing the code. MIT license

About

build simple tests to validate functions with configurable args, kwargs and user inputs

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • HTML 51.7%
  • Jupyter Notebook 48.0%
  • Other 0.3%