def METHOD_NAME(self):
    variations = []
    a_values = [1, 2]
    b_values = [3, 4]
    c_values = [5, 6]
    d_values = [7, 8]
    class Parameterized(slash.Test):
        @slash.parameters.iterate(a=a_values)
        def before(self, a):  # pylint: disable=arguments-differ
            variations.append([a])
        @slash.parameters.iterate(b=b_values, c=c_values)
        def test(self, b, c):
            variations[-1].extend([b, c])
        @slash.parameters.iterate(d=d_values)
        def after(self, d):  # pylint: disable=arguments-differ
            variations[-1].append(d)
    with slash.Session():
        for test in make_runnable_tests(Parameterized):
            test.run()
    self.assertEqual(
        set(tuple(x) for x in variations),
        set(itertools.product(
            a_values,
            b_values,
            c_values,
            d_values
        )))