[Pytest-commit] Issue #757: Heavily using decorators in the System under test suppresses exceptions (pytest-dev/pytest)
Maxim Yaskevich
issues-reply at bitbucket.org
Wed May 27 17:13:49 CEST 2015
New issue 757: Heavily using decorators in the System under test suppresses exceptions
https://bitbucket.org/pytest-dev/pytest/issue/757/heavily-using-decorators-in-the-system
Maxim Yaskevich:
py.test version - ``platform win32 -- Python 2.7.9 -- py-1.4.27 -- pytest-2.7.1``
When a class I write my tests for heavily uses decorators, for instance for implementing a "builder" fluent method interface like below:
```
#!python
from functools import wraps
def fluent(method):
@wraps(method)
def inner(self, *args, **kwargs):
try:
method(self, *args, **kwargs)
finally:
return self
return inner
class Server(object):
def __init__(self, host, port=9090):
self.host = host
self.port = port
self.isrunning = False
self.status = None
self.response = None
@fluent
def start(self):
self.isrunning = True
print 'started'
@fluent
def request(self, url, context=None):
assert self.isrunning
print 'requesting', url, '...'
self.status, self.response = 404, {'error': 'Page not found'}
@fluent
def await_response(self, status):
print 'assert expected', status, 'got', self.status
assert status == self.status # Generates AssertionError
def test_simple():
Server('localhost', port=9000) \
.start() \
.request('/is_prime', {'number': 13}) \
.await_response(200)
```
the test passes.
I think this is absolutely not fair and dangerous, as it can hide real problems from the people.
The thing that surprised me even more is that ``nose`` didn't get to catch that error either.
Am I missing something?
Please run a test sample in the attachment, and feel free to ask for more details if needed.
More information about the pytest-commit
mailing list