New user FAQ¶

pytest-nodev is a simple test-driven search engine for Python code, it finds classes and functions that match the behaviour specified by the given tests.

How does “test-driven code search” work?

To be more precise pytest-nodev is a pytest plugin that lets you execute a set of tests that specify the expected behaviour of a class or a function on all objects in the Python standard library and in all the modules you have installed.

Show me how it works in practice. I need to write a parse_bool function that robustly parses a boolean value from a string. Here is the test I intend to use to validate my own implementation once I write it:

def test_parse_bool (): assert not parse_bool ( 'false' ) assert not parse_bool ( 'FALSE' ) assert not parse_bool ( '0' ) assert parse_bool ( 'true' ) assert parse_bool ( 'TRUE' ) assert parse_bool ( '1' )

First, install the latest version of pytest-nodev from the Python Package Index:

$ pip install pytest-nodev

Then copy your specification test to the test_parse_bool.py file and decorate it with pytest.mark.candidate as follows:

import pytest @pytest.mark.candidate ( 'parse_bool' ) def test_parse_bool (): assert not parse_bool ( 'false' ) assert not parse_bool ( 'FALSE' ) assert not parse_bool ( '0' ) assert parse_bool ( 'true' ) assert parse_bool ( 'TRUE' ) assert parse_bool ( '1' )

Finally, instruct pytest to run your test on all candidate callables in the Python standard library:

$ py.test --candidates-from-stdlib test_parse_bool.py ======================= test session starts ========================== platform darwin -- Python 3.5.1, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 rootdir: /tmp, inifile: setup.cfg plugins: nodev-1.0.0, timeout-1.0.0 collected 4000 items test_parse_bool.py xxxxxxxxxxxx[...]xxxxxxxxXxxxxxxxx[...]xxxxxxxxxxxx ====================== pytest_nodev: 1 passed ======================== test_parse_bool.py::test_parse_bool[distutils.util:strtobool] PASSED === 3999 xfailed, 1 xpassed, 260 pytest-warnings in 75.38 seconds ====

In just over a minute pytest-nodev collected 4000 functions from the standard library, run your specification test on all of them and reported that the strtobool function in the distutils.util module is the only candidate that passes your test.

Now you can review it and if you like it you may use it in your code. No need to write your own implementation!

Wow! Does it work so well all the times?

To be honest strtobool is a little known gem of the Python standard library that is just perfect for illustrating all the benefits of test-driven code search. Here are some of them in rough order of importance: