2013-06-13 19 views
6

Jestem nowy w Github. Jestem nowy w pisaniu przypadków testowych jednostek. Przyczyniłem się do projektu, ale właściciel poprosił mnie o dostarczenie testowych jednostek, które zawiodły przed naprawą i działały po naprawie. Jak mogę to zrobić? Mam napisać je wszystkie razem? Kiedyś będę miał jedną kopię kodu (tj. Z poprawką lub bez poprawki). Używam Pythona i importuję unittest. Jestem zdezorientowany. Przed poprawką otrzymuję wyjątek, więc powinienem użyć assertRaises() do tego. Dużo czytałem, ale nie mogę zacząć.testowanie jednostki python jak do

+1

Nie ma potrzeby używania 'assertRaises': Test ma * nie powodzić * dla starego kodu, stąd prosty krok' assertEqual' (lub jedna z pozostałych kontroli) jest właściwą drogą. Musisz tylko użyć 'assertRaises', jeśli chcesz sprawdzić, czy funkcja ma poprawną obsługę błędów (np. Czy zgłasza poprawny wyjątek, gdy podano nieprawidłowe dane wejściowe). Ogólnie rzecz biorąc, zawsze * zachowujesz prawidłowe zachowanie *. –

+0

Dziękuję Florian za umożliwienie mi zrozumienia poprawnego użycia assertRaises() – Dominix

Odpowiedz

5

Załóżmy, że masz poprawkę dla następujących funkcji: złamany delta

łamany wersję:

def delta(a, b): 
    return a - b 

wersji naprawiono:

def delta(a, b): 
    return abs(a - b) 

Następnie dostarczyć następujące testcase. Zepsuje się z uszkodzoną wersją i będzie działać ze stałą wersją.

import unittest 

from module_you_fixed import delta 

class TestDelta(unittest.TestCase): 
    def test_delta(self): 
     self.assertEqual(delta(9, 7), 2) 
     self.assertEqual(delta(2, 5), 3) 

if __name__ == '__main__': 
    unittest.main() 

Założono, że projekt korzysta ze standardowego modułu unittest biblioteki. Powinieneś użyć struktury, której używa projekt.

+0

Absoultely Perfect Example. Trzy okrzyki. Tylko jedno: myślałem o napisaniu dwóch takich plików jeden z assertsequal() dla naprawionego i jednego z assertRaises() dla wyjątku (uszkodzony). Ale myślę, że po zobaczeniu twojej odpowiedzi mogę po prostu przejść do jednego pliku i po prostu twierdzić, że Equal. Teraz złamany upadnie, a następnie naprawiony. Czy jest to akceptowalne, czy muszę napisać 2 pliki i przekazać oba testy w ustalonym (z assertsEqual), a także przekazać uszkodzony (używając assertRaises)? W każdym razie +1 za odpowiedź. – Dominix

+0

@ Dominix, Just assertEqual one. – falsetru

+0

Kiedy używam assertEqual() i pierwszy test kończy się niepowodzeniem, mam na myśli wywołanie self.assertEqual (delta (9, 7), 2), niż nie musi wykonywać następnego wiersza. W jaki sposób mogę go wykonać dla każdego przypadku testowego i wydrukować FAIL dla wszystkich, a nie tylko awarię dla jednego i wychodzący – Dominix

Powiązane problemy