Mercurial > p > roundup > code
comparison test/pytest_patcher.py @ 5109:43a1f7fe39f5
Improved work-around for pytest markers bug
The previous fix was only a partial solution. Any test class sharing a
parent with, and appearing after, a skipped test class was being skipped
(not just other test classes using the skip/skipif marker). Now only
tests that should be skipped will be skipped, the rest should run as
normal.
| author | John Kristensen <john@jerrykan.com> |
|---|---|
| date | Tue, 28 Jun 2016 15:39:38 +1000 |
| parents | |
| children | 1c94afabb2cb |
comparison
equal
deleted
inserted
replaced
| 5108:67fad01d2009 | 5109:43a1f7fe39f5 |
|---|---|
| 1 """ | |
| 2 The following code was taken from: | |
| 3 | |
| 4 https://github.com/pytest-dev/pytest/issues/568#issuecomment-216569420 | |
| 5 | |
| 6 to resolve a bug with using pytest.mark.skip(). Once the bug is resolved in | |
| 7 pytest this file can be removed along with all the wrapper mark_class() | |
| 8 references in the other test files. | |
| 9 """ | |
| 10 import types | |
| 11 | |
| 12 | |
| 13 def mark_class(marker): | |
| 14 '''Workaround for https://github.com/pytest-dev/pytest/issues/568''' | |
| 15 def copy_func(f): | |
| 16 try: | |
| 17 return types.FunctionType(f.__code__, f.__globals__, | |
| 18 name=f.__name__, argdefs=f.__defaults__, | |
| 19 closure=f.__closure__) | |
| 20 except AttributeError: | |
| 21 return types.FunctionType(f.func_code, f.func_globals, | |
| 22 name=f.func_name, | |
| 23 argdefs=f.func_defaults, | |
| 24 closure=f.func_closure) | |
| 25 | |
| 26 def mark(cls): | |
| 27 for method in dir(cls): | |
| 28 if method.startswith('test_'): | |
| 29 f = copy_func(getattr(cls, method)) | |
| 30 setattr(cls, method, marker(f)) | |
| 31 return cls | |
| 32 return mark |
