Closed
Description
Locations for assertion errors are off when using pytest with coverage (pytest-cov):
def test_config():
assert False
> assert False
E assert False
Bisected to 39ba996.
More information (original issue):
In https://travis-ci.com/pdbpp/fancycompleter/jobs/226053243#L153 it reports this error:
================================== FAILURES ===================================
_________________________________ test_config _________________________________
tmphome = local('C:\\Users\\travis\\AppData\\Local\\Temp\\pytest-of-unknown\\pytest-0\\test_config0')
capsys = <_pytest.capture.CaptureFixture object at 0x0000026CE8AD3508>
def test_config(tmphome, capsys):
class DefaultCfg:
default = 42
class MyCfg(ConfigurableClass):
DefaultConfig = DefaultCfg
config_filename = ".mycfg"
cfg = MyCfg()
# Calls passed in Config.
assert cfg.get_config(Config=lambda: "42") == "42"
# Uses DefaultConfig instance.
assert isinstance(cfg.get_config(None), DefaultCfg)
cfgfile = tmphome.join(MyCfg.config_filename)
# Handles empty config file (missing "Config").
cfgfile.ensure()
assert isinstance(cfg.get_config(None), DefaultCfg)
out, err = capsys.readouterr()
assert out == ""
assert err == ""
# Exception when instantiating Config.
p = tmphome.ensure(MyCfg.config_filename)
print(p, file=capsys._capture.out._old)
cfgfile.write("def Config(): raise Exception('my_exc')")
assert isinstance(cfg.get_config(None), DefaultCfg)
out, err = capsys.readouterr()
assert out == ""
assert err == (
"** error when setting up Config from ~/.mycfg: my_exc (%s:1) **\n" % p
)
print("passed first", file=capsys._capture.out._old)
# Error during execfile.
config_filename = tmphome.ensure(MyCfg.config_filename)
print("config_filename:", config_filename, file=capsys._capture.out._old)
cfgfile.write("raise Exception('my_execfile_exc')")
assert isinstance(cfg.get_config(None), DefaultCfg)
out, err = capsys.readouterr()
assert out == ""
> assert err == "** error when importing ~/.mycfg: my_execfile_exc **\n"
E AssertionError: assert '** error whe...mycfg:1) **\n' == '** error whe...mycfg:1) **\n'
E Skipping 119 identical leading characters in diff, use -v to show
E - st_config0/.mycfg:1) **
E ? ^
E + st_config0\.mycfg:1) **
E ? ^
C:\Users\travis\build\pdbpp\fancycompleter\testing\test_configurableclass.py:48: AssertionError
---------------------------- Captured stdout call -----------------------------
C:\Users\travis\AppData\Local\Temp\pytest-of-unknown\pytest-0\test_config0\.mycfg
Full log: https://travis-ci.com/pdbpp/fancycompleter/jobs/226053243#L153
Note that it reports the error with the wrong assert statement - which can be seen also by "passed first" not being included in "Captured stdout call".
With --assert=plain
it is correct:
_________________________________ test_config _________________________________
tmphome = local('C:\\Users\\travis\\AppData\\Local\\Temp\\pytest-of-unknown\\pytest-0\\test_config0')
capsys = <_pytest.capture.CaptureFixture object at 0x00000170297C1CC8>
def test_config(tmphome, capsys):
class DefaultCfg:
default = 42
class MyCfg(ConfigurableClass):
DefaultConfig = DefaultCfg
config_filename = ".mycfg"
cfg = MyCfg()
# Calls passed in Config.
assert cfg.get_config(Config=lambda: "42") == "42"
# Uses DefaultConfig instance.
assert isinstance(cfg.get_config(None), DefaultCfg)
cfgfile = tmphome.join(MyCfg.config_filename)
# Handles empty config file (missing "Config").
cfgfile.ensure()
assert isinstance(cfg.get_config(None), DefaultCfg)
out, err = capsys.readouterr()
assert out == ""
assert err == ""
# Exception when instantiating Config.
p = tmphome.ensure(MyCfg.config_filename)
print(p, file=capsys._capture.out._old)
cfgfile.write("def Config(): raise Exception('my_exc')")
assert isinstance(cfg.get_config(None), DefaultCfg)
out, err = capsys.readouterr()
assert out == ""
assert err == (
> "** error when setting up Config from ~/.mycfg: my_exc (%s:1) **\n" % p
)
E AssertionError
C:\Users\travis\build\pdbpp\fancycompleter\testing\test_configurableclass.py:37: AssertionError
---------------------------- Captured stdout call -----------------------------
C:\Users\travis\AppData\Local\Temp\pytest-of-unknown\pytest-0\test_config0\.mycfg
platform win32 -- Python 3.7.4, pytest-5.1.0, py-1.8.0, pluggy-0.12.0