refine unittest support to also work with twisted trial test cases better by
introducing a slightly hackish way to report a failure upstream
This commit is contained in:
@@ -334,6 +334,17 @@ def test_pytest_fail():
|
||||
s = excinfo.exconly(tryshort=True)
|
||||
assert s.startswith("Failed")
|
||||
|
||||
def test_pytest_fail_notrace(testdir):
|
||||
testdir.makepyfile("""
|
||||
import pytest
|
||||
def test_hello():
|
||||
pytest.fail("hello", pytrace=False)
|
||||
""")
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines([
|
||||
"hello"
|
||||
])
|
||||
|
||||
def test_exception_printing_skip():
|
||||
try:
|
||||
pytest.skip("hello")
|
||||
|
||||
@@ -103,3 +103,65 @@ def test_class_setup(testdir):
|
||||
""")
|
||||
reprec = testdir.inline_run(testpath)
|
||||
reprec.assertoutcome(passed=3)
|
||||
|
||||
|
||||
@pytest.mark.multi(type=['Error', 'Failure'])
|
||||
def test_testcase_adderrorandfailure_defers(testdir, type):
|
||||
testdir.makepyfile("""
|
||||
from unittest import TestCase
|
||||
import pytest
|
||||
class MyTestCase(TestCase):
|
||||
def run(self, result):
|
||||
excinfo = pytest.raises(ZeroDivisionError, lambda: 0/0)
|
||||
try:
|
||||
result.add%s(self, excinfo._excinfo)
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except:
|
||||
pytest.fail("add%s should not raise")
|
||||
def test_hello(self):
|
||||
pass
|
||||
""" % (type, type))
|
||||
result = testdir.runpytest()
|
||||
assert 'should not raise' not in result.stdout.str()
|
||||
|
||||
@pytest.mark.multi(type=['Error', 'Failure'])
|
||||
def test_testcase_custom_exception_info(testdir, type):
|
||||
testdir.makepyfile("""
|
||||
from unittest import TestCase
|
||||
import py, pytest
|
||||
class MyTestCase(TestCase):
|
||||
def run(self, result):
|
||||
excinfo = pytest.raises(ZeroDivisionError, lambda: 0/0)
|
||||
# we fake an incompatible exception info
|
||||
from _pytest.monkeypatch import monkeypatch
|
||||
mp = monkeypatch()
|
||||
def t(*args):
|
||||
mp.undo()
|
||||
raise TypeError()
|
||||
mp.setattr(py.code, 'ExceptionInfo', t)
|
||||
try:
|
||||
excinfo = excinfo._excinfo
|
||||
result.add%(type)s(self, excinfo)
|
||||
finally:
|
||||
mp.undo()
|
||||
def test_hello(self):
|
||||
pass
|
||||
""" % locals())
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines([
|
||||
"NOTE: Incompatible Exception Representation*",
|
||||
"*ZeroDivisionError*",
|
||||
"*1 failed*",
|
||||
])
|
||||
|
||||
def test_testcase_totally_incompatible_exception_info(testdir):
|
||||
item, = testdir.getitems("""
|
||||
from unittest import TestCase
|
||||
class MyTestCase(TestCase):
|
||||
def test_hello(self):
|
||||
pass
|
||||
""")
|
||||
item.addError(None, 42)
|
||||
excinfo = item._excinfo
|
||||
assert 'ERROR: Unknown Incompatible' in str(excinfo.getrepr())
|
||||
|
||||
Reference in New Issue
Block a user