Насмешливый специфический метод в тестах не работает - PullRequest
3 голосов
/ 05 ноября 2019

Я использую Python 3.5.2. Я пытаюсь смоделировать одни и те же методы в разных тестовых случаях, но похоже, что sys.argv не смоделировано.

Я также пытался использовать вместо этого @patch декоратор, но нетбезрезультатно.

main.py:

from os import path
from sys import argv

globals = {}

def get_target_dir():
    if len(argv) < 2 or not path.exists(argv[1]):
        print("You must specify valid full path of instances directory as command line argument.")
        exit(1)
    globals['TARGET_DIR'] = argv[1] + ('/' if argv[1][-1] != '/' else '')

tests.py:

import unittest
from unittest.mock import patch
from main import get_target_dir, globals

class TestMain(unittest.TestCase):
    def test_correct_target_dir(self):
        argv = [None, '/test']
        with patch('sys.argv', argv), patch('os.path.exists', lambda _: True):
            get_target_dir()
            assert globals['TARGET_DIR'] == argv[1] + '/'

    def test_invalid_target_dir(self):
        argv = [None, '/']
        with patch('sys.argv', argv), patch('os.path.exists', lambda _: False):
            try:
                get_target_dir()
            except SystemExit:
                assert True
            else:
                assert False

Когда я запускаю тесты, из-за описанной выше проблемы они не работаюткак и ожидалось.

1 Ответ

0 голосов
/ 05 ноября 2019

Я понял, что не знаю о Гочах , поэтому я ошибочно включил метод sys.argv в main.py - после замены импорта from sys import argv на import sys (и дальнейшее добавлениеsys. до argv в коде) все заработало.

...