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", (), {})))
Beispiel #3
0
    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__"])
                 ])
Beispiel #5
0
 def _mark_test(name, test_item):
     return MarkDecorator(name)(test_item)
Beispiel #6
0
 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)