Wszystkie trzy opisane sytuacje dotyczą sytuacji, w których należy szczególnie uporać się z zapewnieniem luźnego połączenia w projekcie.
Czy ty naprawdę potrzebujesz do testu jednostkowego Pythona w metodzie raw_input
? Metoda open
? os.environ.get
?
Musisz skonfigurować projekt, aby móc zastąpić inne sposoby pobierania tego wejścia. Następnie, podczas testów jednostkowych, wrzucisz stub, który tak naprawdę nie nazywa się raw_input
lub open
.
Na przykład, twój normalny kod może być coś takiego:
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"))
Sesja wygląda następująco:
What is your name? somebody
Hello somebody
Hello [some text]
Hello mark
Wtedy nasz test będzie jak:
def test_say_hello():
output = say_hello(lambda: "test")
assert(output == "Hello test")
Należy pamiętaj, że nie powinieneś testować języka IO (chyba że to ty projektujesz język, w hich jest zupełnie inną sytuacją).
sprawdzenie, czy rozumiem pytanie poprawnie: co chcesz wiedzieć: jak sprawdzić, czy plik wykonywalny/script, biorąc pod uwagę kilka czynników produkcji, takich jak zmienne stdin/Środowisko daje oczekiwanych wyników , np. stdout, stderr czy status wyjścia? –