Mam następującą funkcję:
def open_warc(file_name, encoding='ISO-8859-1'):
"""Function to iter line by line WARC file.
Args:
file_name:
The given WARC file name.
encoding:
Value encoding.
Returns:
Generator which yields decoded lines from WARC file.
"""
if file_name.lower().endswith('.gz'):
opener = gzip.open
else:
opener = file
with opener(file_name) as f:
for line in f:
yield line.decode(encoding)
Zastanawiam się czy ma sens testowanie tej funkcji oraz jeśli tak, to jak tego dokonać. Niespecjalnie wiem na czym miałby skupić się tego rodzaju testu.
Może powinienem mieć 2 funkcje, jedna do otworzenia pliku, a druga jako generator, który dekoduje wszystkie linie? Wtedy mógłbym przetestować mój warunek, ale nadal miałbym problem z przetestowaniem dekodującego generatora. Poza tym rozbijanie wszystkiego na drobny mak też wydaje mi się dziwne, ponieważ te bardzo małe funkcje będą miały zastosowanie w projekcie wyłącznie w jednym miejscu.
Wiem, że mógłbym po prostu zrobić mock na open. Wstawić do mocka jakiś tekst, a potem sprawdzać czy każda linia została odpowiednio przekodowana.
To co mnie odstrasza przy tym rozwiązaniu to fakt, że ktoś już przetestował metodę decode, no i sprawdzanie jej działania byłoby marnowaniem czasu.
Z drugiej strony mógłbym sprawdzić czy po prostu zrobić mock na decode i sprawdzić czy zostało wywołane określoną ilość razy. No, ale wtedy mój test nie jest uniwersalny, bo jest zależny od implementacji :|
Sam już nie wiem jak postąpić. Jak ty byś postąpił?