python: Как смоделировать os.statvfs, когда он возвращает тип данных posix.statvfs_result - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь написать пример модульного теста. Ниже приведен частичный код исходной функции:

def disk_space(something, otherthing):
    """
    Comments
    """
    dir_map = something['dir_map']
    for dir, expected_free_gb in dir_map.items():
        try:
            result = os.statvfs(dir)
            block_size = result.f_frsize
            avail_blocks = result.f_bavail
            giga = 1024 * 1024 * 1024
            free_size = avail_blocks * block_size / giga
            if free_size >= float(expected_free_gb):
                print "No need to clear space"
            else:
                print "Clear some space"

Функция модульного теста:

@patch('os.statvfs', return_value=posix.statvfs_result(f_frsize=4096, f_bavail=2599495))
def test_disk_space(self, os_statvfs):
    something
    something

Теперь, если я вернусь значение в posix.statvfs_result типе данных выдает ошибку:

TypeError: Обязательный аргумент 'sequence' (pos 1) не найден

И если я просто дам return_value=(f_frsize=4096, f_bavail=2599495) он говорит:

str () не имеет f_frsize.

1 Ответ

0 голосов
/ 29 января 2020

Используйте функцию ниже

@patch('os.statvfs', return_value=os.statvfs_result((4096, 4096, 1909350, 1491513, 1394521, 971520, 883302, 883302, 0, 255)))
def test_disk_space(self, os_statvfs):
    something
    something

Значения соответствуют нижеследующим полям, поэтому изменяйте их сообразно. Также обратите внимание, что значения должны быть в двойных скобках.

posix.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=1909350L, f_bfree=1491513L,
f_bavail=1394521L, f_files=971520L, f_ffree=883302L, f_fvail=883302L, f_flag=0,
f_namemax=255)
...