def update_callspecs(self): """ :return: """ for pmark in self.pmarks: if len(pmark.param_names) == 1: if PYTEST3_OR_GREATER: argvals = tuple(v if is_marked_parameter_value(v) else (v,) for v in pmark.param_values) else: argvals = [] for v in pmark.param_values: if is_marked_parameter_value(v): newmark = MarkDecorator(v.markname, v.args[:-1] + ((v.args[-1],),), v.kwargs) argvals.append(newmark) else: argvals.append((v,)) argvals = tuple(argvals) else: argvals = pmark.param_values self.parametrize(argnames=pmark.param_names, argvalues=argvals, ids=pmark.param_ids, # use indirect = False and scope = 'function' to avoid having to implement complex patches indirect=False, scope='function') if not PYTEST33_OR_GREATER: # fix the CallSpec2 instances so that the marks appear in an attribute "mark" # noinspection PyProtectedMember for c in self._calls: c.marks = list(c.keywords.values())
def prop_alias(mock_obj_prefix=None, mock_factory_prefix="factories"): """ prop mark装饰器别名,指定要mock对象及工厂对象名字的前缀,减少装饰器长度。 :param mock_obj_prefix: :param mock_factory_prefix: :return: """ return DecoratorProxy(mock_obj_prefix, mock_factory_prefix, MarkDecorator(Mark("prop", (), {})))
def add_marker(self, marker): """ dynamically add a marker object to the node. ``marker`` can be a string or pytest.mark.* instance. """ from _pytest.mark import MarkDecorator if isinstance(marker, py.builtin._basestring): marker = MarkDecorator(marker) elif not isinstance(marker, MarkDecorator): raise ValueError("is not a string or pytest.mark.* Marker") self.keywords[marker.name] = marker
def prop_alias(mock_obj_prefix=None, mock_factory_prefix="factories"): """ prop mark装饰器别名,指定要mock对象及工厂对象名字的前缀,减少装饰器长度。 :param mock_obj_prefix: :param mock_factory_prefix: :return: """ return Proxy(MarkDecorator(Mark("prop", (), {})), before=[ AOP.Hook(wrapper(mock_obj_prefix, mock_factory_prefix), ["__call__"]) ])
def _mark_test(name, test_item): return MarkDecorator(name)(test_item)
def __getattr__(self, item): # Return an marker remover if item[0] == "_": raise AttributeError("Marker name must NOT start with underscore") return MarkDecorator("unmark:%s" % item)