Search code examples
pythonunit-testingpytest

Why PyTest is not collecting tests (collected 0 items)?


I have been trying to run unit tests using pytest.

I wrote a module with one class and some methods inside that class, and I wrote a unit test for this module (with a simple assert statement to check equality of lists) where I first instantiated the class with a list.

Then I invoke a method on that object (from the class). Both test.py and the script to be tested are in the same folder. When I run pytest on it, it reports "collected 0 items".

I am new to pytest and but I am unable to run their examples successfully. What am I missing here?

I am running Python version 3.5.1 and pytest version 2.8.1 on Windows 7.

My test.py code:

from sort_algos import Sorts

def integer_sort_test():
    myobject1 = Sorts([-100, 10, -10])
    assert myobject1.merge_sort() == [-101, -100, 10]

sort_algos.py is a module containing Sorts class.

merge_sort is a method from Sorts.


Solution

  • pytest gathers tests according to a naming convention. By default any file that is to contain tests must be named starting with test_, classes that hold tests must be named starting with Test, and any function in a file that should be treated as a test must also start with test_.

    If you rename your test file to test_sorts.py and rename the example function you provide above as test_integer_sort, then you will find it is automatically collected and executed.

    This test collecting behavior can be changed to suit your desires. Changing it will require learning about configuration in pytest.