Как предоставить stdin, файлы и переменная среды вводит к модульным тестам Python?

Когда вы пытаетесь удалить файл, ваш Aws :: FStream все еще открыт. Поэтому вам просто нужно закрыть его, прежде чем пытаться удалить.

Я думаю, вы можете просто позвонить

input_data->close();

перед удалением файла.

28
задан Ciro Santilli 新疆改造中心法轮功六四事件 19 June 2016 в 22:47
поделиться

1 ответ

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

Вам действительно нужно провести модульное тестирование метода Python raw_input? open метод? os.environ.get? Нет. [1 110]

Вам необходимо настроить дизайн так, чтобы вы могли заменить другие способы получения этого ввода. Затем, во время ваших модульных тестов, вы добавите заглушку какого-то рода, которая на самом деле не вызывает raw_input или open.

Например, ваш обычный код может выглядеть примерно так:

import os
def say_hello(input_func):
    name = input_func()
    return "Hello " + name

def prompt_for_name():
    return raw_input("What is your name? ")

print say_hello(prompt_for_name)
# Normally would pass in methods, but lambdas can be used for brevity
print say_hello(lambda: open("a.txt").readline())
print say_hello(lambda: os.environ.get("USER"))

Сессия выглядит так:

What is your name? somebody
Hello somebody
Hello [some text]

Hello mark

Тогда ваш тест будет выглядеть так:

def test_say_hello():
    output = say_hello(lambda: "test")
    assert(output == "Hello test")

Имейте в виду, что вам не нужно тестировать возможности ввода-вывода языка (если только вы не разрабатываете язык, что совершенно иная ситуация).

32
ответ дан Mark Rushakoff 28 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: