python модульный тест с макетом для проверки пути к файлу - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующая python функция в 'au.py':

import os

def resolv_conf_audit():
    ALT_PATH = "/etc/monitor/etc/resolv.conf.{}".format(os.uname()[1])
    RES_PATH = "/data/bin/resolvconf"
    if os.path.isfile(RES_PATH):

        return "PASSED", "/data/bin/resolvconf is present"

    elif os.path.isfile(ALT_PATH):
        return "PASSED", "/etc/monitor/etc/resolv.conf. is present"

    else:
        return "FAILED"

Мне нужно написать модульный тест с макетом, который может проверить, существует ли путь, или нет, это модульный тест, который я написал

from au import resolv_conf_audit
import unittest
from unittest.mock import patch


class TestResolvConf(unittest.TestCase):
    @patch('os.path.isfile.ALT_PATH')
    def test_both_source_files_not(self, mock_os_is_file):
        mock_os_is_file.return_value =  False
        assert resolv_conf_audit() == "FAILED"

, но я получаю следующую ошибку:

AttributeError: <function isfile at 0x10bdea6a8> does not have the attribute 'ALT_PATH'

Как мне поиздеваться над проверкой наличия ALT_PATH и RES_PATH, чтобы я мог проверить функцию. В будущем этот модульный тест должен иметь возможность имитировать удаление некоторых файлов, прежде чем писать, что я тестирую этот простой

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Спасибо @ Mauro Baraldi, согласно вашему предложению, я немного изменил код, и теперь он работает нормально

    def test_both_source_files_not(self, mock_os_is_file):
        mock_os_is_file.side_effect = [False , False]
        assert resolv_conf_audit() == "FAILED" 
0 голосов
/ 28 мая 2020

Mocks по определению - это способ имитации поведения объектов. Вы пытаетесь обработать переменную (ALT_PATH) внутри своей функции.

Все, что вам нужно, это имитировать только метод os.path.isfile .

class TestResolvConf(unittest.TestCase):

    @patch('os.path.isfile')
    def test_both_source_files_not(self, mock_os_is_file):
        mock_os_is_file.return_value =  False
        assert resolv_conf_audit() == "FAILED"

    @patch('os.path.isfile')
    def test_both_source_files_exists(self, mock_os_is_file):
        mock_os_is_file.return_value =  True
        assert resolv_conf_audit() == "PASSED"
...