Witam otóż na stronie repl.it mam do opisania parę zadań i zastanawiam się czy istnieje możliwość napisania testu jednostkowego, który będzie w stanie sprawdzić czy użytkownik napisał pewną część kodu. Chodzi o sprawdzenie inputu jaki użytkownik będzie miał za zadanie napisać.
Jeżeli ktoś posiada taką wiedzę lub materiały umożliwiające mi opanowanie tego, byłbym za nie bardzo wdzięczny ;)
UnitTest służy do sprawdzenia, czy funkcja zwraca oczekiwane wyniki. A nie do tego, czy kod został napisany tak jak to sobie założyliśmy.
Z tego co widziałem na filmiku, to w tym serwisie można tworzyć unit testy ;)
Już dziś poznaj unittest.mock: https://docs.python.org/3/library/unittest.mock.html
from unittest import mock
def test_input():
with mock.patch('builtins.input', return_value='success'):
assert input() == 'success'
Stosowanie patch
jest OK, kiedy musisz napisać test do istniejącego kodu (czyt. za bardzo nie ma możliwości wstrzykiwania zależności).
W przeciwnym razie lepiej tworzyć własne klasy usług:
from unittest.mock import Mock
class UserInput:
def get_text(prompt=''):
return input(prompt)
class IncApp:
def __init__(self, user_input):
self.user_input = user_input
def run(self):
text = self.user_input.get_text()
try:
return int(text) + 1
except ValueError:
return None
def test_inc_2():
user_input = Mock(UserInput)
user_input.get_text = Mock(return_value='10')
app = IncApp(user_input)
assert app.run() == 11
Dobrze wiedzieć, ale wątpię aby autorowi tematu chodziło o użytkownika aplikacji napisanej przez użytkownika serwisu.
W temacie testów w Pythonie, czego używacie najchętniej i najczęściej?
PyTest ?
Unit test?
nose?
doctest?
Inne ?
Lista ( https://pythonhosted.org/testing/ */ https:*wiki.python.org/moin/PythonTestingToolsTaxonomy ) jest obszerna - ale co wybrać? Co polecacie?