Skip to content

Commit

Permalink
Merge pull request #1878 from jdufresne/deprecate-test-suite
Browse files Browse the repository at this point in the history
Deprecate the test command
  • Loading branch information
pganssle authored Oct 22, 2019
2 parents 1362c8c + cd84510 commit a768f8d
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 1 deletion.
1 change: 1 addition & 0 deletions changelog.d/1878.change.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Formally deprecated the ``test`` command, with the recommendation that users migrate to ``tox``.
13 changes: 13 additions & 0 deletions docs/setuptools.txt
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,8 @@ unless you need the associated ``setuptools`` feature.
specified test suite, e.g. via ``setup.py test``. See the section on the
`test`_ command below for more details.

New in 41.5.0: Deprecated the test command.

``tests_require``
If your project's tests need one or more additional packages besides those
needed to install it, you can use this option to specify them. It should
Expand All @@ -357,6 +359,8 @@ unless you need the associated ``setuptools`` feature.
are run, but only downloaded to the project's setup directory if they're
not already installed locally.

New in 41.5.0: Deprecated the test command.

.. _test_loader:

``test_loader``
Expand All @@ -380,6 +384,8 @@ unless you need the associated ``setuptools`` feature.
as long as you use the ``tests_require`` option to ensure that the package
containing the loader class is available when the ``test`` command is run.

New in 41.5.0: Deprecated the test command.

``eager_resources``
A list of strings naming resources that should be extracted together, if
any of them is needed, or if any C extensions included in the project are
Expand Down Expand Up @@ -2142,6 +2148,11 @@ distutils configuration file the option will be added to (or removed from).
``test`` - Build package and run a unittest suite
=================================================

.. warning::
``test`` is deprecated and will be removed in a future version. Users
looking for a generic test entry point independent of test runner are
encouraged to use `tox <https://tox.readthedocs.io>`_.

When doing test-driven development, or running automated builds that need
testing before they are deployed for downloading or use, it's often useful
to be able to run a project's unit tests without actually deploying the project
Expand Down Expand Up @@ -2187,6 +2198,8 @@ available:
If you did not set a ``test_suite`` in your ``setup()`` call, and do not
provide a ``--test-suite`` option, an error will occur.

New in 41.5.0: Deprecated the test command.


.. _upload:

Expand Down
10 changes: 9 additions & 1 deletion setuptools/command/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def __get__(self, obj, objtype=None):
class test(Command):
"""Command to run unit tests after in-place build"""

description = "run unit tests after in-place build"
description = "run unit tests after in-place build (deprecated)"

user_options = [
('test-module=', 'm', "Run 'test_suite' in specified module"),
Expand Down Expand Up @@ -214,6 +214,14 @@ def install_dists(dist):
return itertools.chain(ir_d, tr_d, er_d)

def run(self):
self.announce(
"WARNING: Testing via this command is deprecated and will be "
"removed in a future version. Users looking for a generic test "
"entry point independent of test runner are encouraged to use "
"tox.",
log.WARN,
)

installed_dists = self.install_dists(self.distribution)

cmd = ' '.join(self._argv)
Expand Down
50 changes: 50 additions & 0 deletions setuptools/tests/test_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from __future__ import unicode_literals

import mock
from distutils import log
import os

Expand Down Expand Up @@ -124,3 +125,52 @@ def test_test(self):
cmd.run()
out, err = capfd.readouterr()
assert out == 'Foo\n'


@pytest.mark.usefixtures('sample_test')
def test_warns_deprecation(capfd):
params = dict(
name='foo',
packages=['name', 'name.space', 'name.space.tests'],
namespace_packages=['name'],
test_suite='name.space.tests.test_suite',
use_2to3=True
)
dist = Distribution(params)
dist.script_name = 'setup.py'
cmd = test(dist)
cmd.ensure_finalized()
cmd.announce = mock.Mock()
cmd.run()
capfd.readouterr()
msg = (
"WARNING: Testing via this command is deprecated and will be "
"removed in a future version. Users looking for a generic test "
"entry point independent of test runner are encouraged to use "
"tox."
)
cmd.announce.assert_any_call(msg, log.WARN)


@pytest.mark.usefixtures('sample_test')
def test_deprecation_stderr(capfd):
params = dict(
name='foo',
packages=['name', 'name.space', 'name.space.tests'],
namespace_packages=['name'],
test_suite='name.space.tests.test_suite',
use_2to3=True
)
dist = Distribution(params)
dist.script_name = 'setup.py'
cmd = test(dist)
cmd.ensure_finalized()
cmd.run()
out, err = capfd.readouterr()
msg = (
"WARNING: Testing via this command is deprecated and will be "
"removed in a future version. Users looking for a generic test "
"entry point independent of test runner are encouraged to use "
"tox.\n"
)
assert msg in err

0 comments on commit a768f8d

Please sign in to comment.