mardi 2 octobre 2018

Unit Testing a Method That Uses a Context Manager

I have a method I would like to unit test. The method expects a file path, which is then opened - using a context manager - to parse a value which is then returned, should it be present, simple enough.

@staticmethod
def read_in_target_language(file_path):
    """
    .. note:: Language code attributes/values can occur
    on either the first or the second line of bilingual.
    """
    with codecs.open(file_path, 'r', encoding='utf-8') as source:
        line_1, line_2 = next(source), next(source)
        get_line_1 = re.search(
            '(target-language=")(.+?)(")', line_1, re.IGNORECASE)
        get_line_2 = re.search(
            '(target-language=")(.+?)(")', line_2, re.IGNORECASE)
        if get_line_1 is not None:
            return get_line_1.group(2)
        else:
            return get_line_2.group(2)

I want to avoid testing against external files - for obvious reasons - and do not wish to create temp files. In addition, I cannot use StringIO in this case.

How can I mock the file_path object in my unit test case? Ultimately I would need to create a mock path that contains differing values. Any help is gratefully received.

Aucun commentaire:

Enregistrer un commentaire