def parametrize_over(cls, test, data):
    """Iterates over dataset and adds test for each combination of params

    Args:
        cls: TestCase class where tests will be attached.
        test: method of TestCase to parametrize.
        data: List of ParamSet objects, one for each test run.

    Returns:
        None

    """
    for entry in data:
        test_name = "test_" + entry.id
        def _partial(func, *args, **kwargs):
            def wrapped(self):
                return func(self, *args, **kwargs)
            return wrapped
        setattr(cls, test_name, _partial(test, *entry.args, **entry.kwargs))