Run tests

How to add a new test runner to the test goal.


Example repository

This guide walks through adding a simple test implementation for Bash that runs the shunit2 test runner. See here for the final implementation.

1. Set up a tests target type

Usually, you will want to add a "tests" target type for your language, such as bash_tests or python_tests. A binary target contrasts with a "library" target, such as bash_library. A test target is useful so that ./pants test :: doesn't try to run tests on non-test files.

When creating a tests target, you should usually subclass the Sources field and set the default. You may also want to create a Timeout field, which should subclass IntField.

See Creating new targets for a guide on how to define new target types.

from import COMMON_TARGET_FIELDS, Dependencies, IntField, Sources, Target

class BashSources(Sources):
    expected_file_extensions = (".sh",)

class BashTestSources(BashSources):
    default = ("*", "test_*.sh")

class BashTestTimeout(IntField):
     """Whether to time out after a certain amount of time.

      If unset, the test will never time out.

     alias = "timeout"

class BashTests(Target):
    """Bash tests that are run via `shunit2`."""

    alias = "bash_tests"
    core_fields = (*COMMON_TARGET_FIELDS, Dependencies, BashTestSources, BashTestTimeout)

2. Set up a subclass of TestFieldSet

Did this page help you?