change test module importing behaviour to append to sys.path
instead of prepending. This better allows to run test modules against installated versions of a package even if the package under test has the same import root. In this example:: testing/__init__.py testing/test_pkg_under_test.py pkg_under_test/ the tests will preferrably run against the installed version of pkg_under_test whereas before they would always pick up the local version. --HG-- branch : prefer_installed
This commit is contained in:
parent
fb07a09964
commit
5c8e5acf9d
13
CHANGELOG
13
CHANGELOG
|
@ -1,6 +1,19 @@
|
|||
2.8.0.dev (compared to 2.7.X)
|
||||
-----------------------------
|
||||
|
||||
- change test module importing behaviour to append to sys.path
|
||||
instead of prepending. This better allows to run test modules
|
||||
against installated versions of a package even if the package
|
||||
under test has the same import root. In this example::
|
||||
|
||||
testing/__init__.py
|
||||
testing/test_pkg_under_test.py
|
||||
pkg_under_test/
|
||||
|
||||
the tests will preferrably run against the installed version
|
||||
of pkg_under_test whereas before they would always pick
|
||||
up the local version. Thanks Holger Krekel.
|
||||
|
||||
|
||||
2.7.1.dev (compared to 2.7.0)
|
||||
-----------------------------
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
#
|
||||
__version__ = '2.8.0.dev1'
|
||||
__version__ = '2.8.0.dev2'
|
||||
|
|
|
@ -254,7 +254,7 @@ class TmpTestdir:
|
|||
break
|
||||
self.tmpdir = tmpdir
|
||||
self.plugins = []
|
||||
self._syspathremove = []
|
||||
self._savesyspath = list(sys.path)
|
||||
self.chdir() # always chdir
|
||||
self.request.addfinalizer(self.finalize)
|
||||
|
||||
|
@ -270,8 +270,7 @@ class TmpTestdir:
|
|||
has finished.
|
||||
|
||||
"""
|
||||
for p in self._syspathremove:
|
||||
sys.path.remove(p)
|
||||
sys.path[:] = self._savesyspath
|
||||
if hasattr(self, '_olddir'):
|
||||
self._olddir.chdir()
|
||||
# delete modules that have been loaded from tmpdir
|
||||
|
@ -370,7 +369,6 @@ class TmpTestdir:
|
|||
if path is None:
|
||||
path = self.tmpdir
|
||||
sys.path.insert(0, str(path))
|
||||
self._syspathremove.append(str(path))
|
||||
|
||||
def mkdir(self, name):
|
||||
"""Create a new (sub)directory."""
|
||||
|
|
|
@ -485,7 +485,7 @@ class Module(pytest.File, PyCollector):
|
|||
def _importtestmodule(self):
|
||||
# we assume we are only called once per module
|
||||
try:
|
||||
mod = self.fspath.pyimport(ensuresyspath=True)
|
||||
mod = self.fspath.pyimport(ensuresyspath="append")
|
||||
except SyntaxError:
|
||||
raise self.CollectError(
|
||||
py.code.ExceptionInfo().getrepr(style="short"))
|
||||
|
@ -2057,3 +2057,4 @@ def get_scope_node(node, scope):
|
|||
return node.session
|
||||
raise ValueError("unknown scope")
|
||||
return node.getparent(cls)
|
||||
|
||||
|
|
10
setup.py
10
setup.py
|
@ -31,12 +31,12 @@ def get_version():
|
|||
def has_environment_marker_support():
|
||||
"""
|
||||
Tests that setuptools has support for PEP-426 environment marker support.
|
||||
|
||||
The first known release to support it is 0.7 (and the earliest on PyPI seems to be 0.7.2
|
||||
|
||||
The first known release to support it is 0.7 (and the earliest on PyPI seems to be 0.7.2
|
||||
so we're using that), see: http://pythonhosted.org/setuptools/history.html#id142
|
||||
|
||||
|
||||
References:
|
||||
|
||||
|
||||
* https://wheel.readthedocs.org/en/latest/index.html#defining-conditional-dependencies
|
||||
* https://www.python.org/dev/peps/pep-0426/#environment-markers
|
||||
"""
|
||||
|
@ -48,7 +48,7 @@ def has_environment_marker_support():
|
|||
|
||||
|
||||
def main():
|
||||
install_requires = ['py>=1.4.25']
|
||||
install_requires = ['py>=1.4.27.dev2']
|
||||
extras_require = {}
|
||||
if has_environment_marker_support():
|
||||
extras_require[':python_version=="2.6" or python_version=="3.0" or python_version=="3.1"'] = ['argparse']
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import sys
|
||||
from textwrap import dedent
|
||||
import pytest, py
|
||||
|
||||
class TestModule:
|
||||
|
@ -23,6 +25,24 @@ class TestModule:
|
|||
"*HINT*",
|
||||
])
|
||||
|
||||
def test_import_appends_for_import(self, testdir, monkeypatch):
|
||||
syspath = list(sys.path)
|
||||
monkeypatch.setattr(sys, "path", syspath)
|
||||
root1 = testdir.mkdir("root1")
|
||||
root2 = testdir.mkdir("root2")
|
||||
root1.ensure("x456.py")
|
||||
root2.ensure("x456.py")
|
||||
p = root2.join("test_x456.py")
|
||||
p.write(dedent("""\
|
||||
import x456
|
||||
def test():
|
||||
assert x456.__file__.startswith(%r)
|
||||
""" % str(root1)))
|
||||
syspath.insert(0, str(root1))
|
||||
with root2.as_cwd():
|
||||
reprec = testdir.inline_run()
|
||||
reprec.assertoutcome(passed=1)
|
||||
|
||||
def test_syntax_error_in_module(self, testdir):
|
||||
modcol = testdir.getmodulecol("this is a syntax error")
|
||||
pytest.raises(modcol.CollectError, modcol.collect)
|
||||
|
|
|
@ -238,7 +238,7 @@ def test_pytestconfig_is_session_scoped():
|
|||
|
||||
|
||||
class TestNoselikeTestAttribute:
|
||||
def test_module(self, testdir):
|
||||
def test_module_with_global_test(self, testdir):
|
||||
testdir.makepyfile("""
|
||||
__test__ = False
|
||||
def test_hello():
|
||||
|
@ -248,7 +248,7 @@ class TestNoselikeTestAttribute:
|
|||
assert not reprec.getfailedcollections()
|
||||
calls = reprec.getreports("pytest_runtest_logreport")
|
||||
assert not calls
|
||||
|
||||
|
||||
def test_class_and_method(self, testdir):
|
||||
testdir.makepyfile("""
|
||||
__test__ = True
|
||||
|
|
|
@ -772,6 +772,7 @@ def test_default_markers(testdir):
|
|||
])
|
||||
|
||||
def test_importplugin_issue375(testdir):
|
||||
testdir.syspathinsert(testdir.tmpdir)
|
||||
testdir.makepyfile(qwe="import aaaa")
|
||||
excinfo = pytest.raises(ImportError, lambda: importplugin("qwe"))
|
||||
assert "qwe" not in str(excinfo.value)
|
||||
|
|
Loading…
Reference in New Issue