def _build_final_method_name(method_name, dataset_name, repeat_suffix):
    """
    Return a nice human friendly name, that almost looks like code.

    Example: a test called 'test_something' with a dataset of (5, 'hello')
         Return:  "test_something(5, 'hello')"

    Example: a test called 'test_other_stuff' with dataset of (9) and repeats
         Return: "test_other_stuff(9) iteration_<X>"

    :param method_name:
        Base name of the method to add.
    :type method_name:
        `unicode`
    :param dataset_name:
        Base name of the data set.
    :type dataset_name:
        `unicode` or None
    :param repeat_suffix:
        Suffix to append to the name of the generated method.
    :type repeat_suffix:
        `unicode` or None
    :return:
        The fully composed name of the generated test method.
    :rtype:
        `unicode`
    """
    if not dataset_name and not repeat_suffix:
        return method_name

    # Place data_set info inside parens, as if it were a function call
    test_method_suffix = '({})'.format(dataset_name or "")

    if repeat_suffix:
        test_method_suffix = test_method_suffix + " " + repeat_suffix

    test_method_name_for_dataset = "{}{}".format(
        method_name,
        test_method_suffix,
    )

    return test_method_name_for_dataset