Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-08-08 20:25:38

  HAL9000 - Użytkownik

HAL9000
Użytkownik
Zarejestrowany: 2006-04-22

Python i tdd

Witam,
Znowu jestem w tak zwanej kropce i potrzebuję pomocy lol
Na youtube jakiś link zaprowadził mnie do filmiku na którym gość za pomocą techniki tdd -> http://en.wikipedia.org/wiki/Test-driven_development w javie projektuje w około 3 minuty klasę na którą ja siedziałbym pewnie ze 2 dni (co skłoniło mnie do podejrzeń że to albo wyreżyserowane albo koleś nie ma żadnego życia towarzyskiego kolejny lol) ale do rzeczy.
Mam dwa pliki:

Kod:

#!/usr/bin/python

class Point(object):
    def __init__(this, x=0, y=0):
        """Create new point object with given coordinate x, y"""

        # lets make some initial test

        #assert type(x) in (int, long, float)
        #assert type(y) in (int, long, float)
        if type(x) not in (int, long, float):
            raise TypeError
        if type(y) not in (int, long, float):
            raise TypeError

        this.x=x
        this.y=y
    def dist_from_orig(this):
        """This method returns distance from origin"""
        return (this.x**2+this.y**2)**0.5

    def dist_from(this, otherp):
        return ((this.x-otherp.x)**2 + (this.y-otherp.y)**2)**0.5

    def reflect_x(this):
        return (this.x, -this.y)

    def slop_from_orig(this):
        return float(this.y)/this.x

    def __str__(this):
        return "({0}, {1})".format(this.x, this.y)


def main():
    p1=Point(3, 17)
    p2=Point(4, 12)
    print p1.dist_from_orig()
    print p2.dist_from(p1)
    print p2.slop_from_orig()
    print p2

if __name__ == "__main__":
    main()

Kod:

import unittest
import point

class TestPoint(unittest.TestCase):
    def setUp(self):
        self.p = point.Point(5, 12)
        self.q = point.Point(6, -1)

    def test_all_kinds_of_distance(self):
        self.assertEqual(self.p.dist_from_orig(), (5**2+12**2)**0.5)

    def test_for_bad_data(self):
        d={'x':2, 'y':3}
        self.assertRaises(TypeError, point.Point.__init__, **d)


if __name__ == "__main__":
    unittest.main(verbosity=2)

i o ile ta czesc dziala naprade ladnie w zaleznosci od tego czy wynik sie zgadza to przechodzi test lub nie

Kod:

 def test_all_kind_of_distance(self):
        self.assertEqual(self.p.dist_from_orig(), (5**2+12**2)**0.5)

natomiast to nie

Kod:

    def test_for_bad_data(self):
        d={'x':2, 'y':3}
        self.assertRaises(TypeError, point.Point.__init__, **d)

mozna tam wysylac lancuch  liczby i zawsze jest OK. Gdzie jest błąd w tym wszystkim?
Przyklady zaczerpniete z:
http://docs.python.org/library/unittest.html#unitte … .assertRaises
http://openbookproject.net/thinkcs/python/english3e/ch12.html


For some reason I'm thinking I'm still 25 but I act like I'm 12.

Offline

 

#2  2011-08-08 21:44:03

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Python i tdd

Jeśli chcesz przetestować point.Point.__init__ to trochę za mało argumentów podajesz, pewnie leci TypeError z tego powodu i jest wszystko ok. Gdybyś np. dał self.assertRaises(TypeError, point.Point, **d) powinno działać, ale to ty wiesz co chcesz testować. Powinieneś używać przecinka w zdaniach, ciężko momentami zrozumieć. Dwie spacje to nie przecinek ;]

Offline

 

#3  2011-08-08 22:17:27

  HAL9000 - Użytkownik

HAL9000
Użytkownik
Zarejestrowany: 2006-04-22

Re: Python i tdd

Problem polega na tym, iż w pierwotnej wersji było tak jak proponujesz czyli: TypeError, point.Point, **d. Nie robiło zupełnie nic, zupełnie jak w przypadku podanym w pierwszej wypowiedzi czyli z jak bardziej jawnym wywolaniem tej metody jak to tylko możliwe. Ten słownik to również kolejna ewolucja wywołania tej metody, poprzednio probowałem z krotką (1, 2) i rezultat był identyczny więc błąd leży gdzieś indziej.


For some reason I'm thinking I'm still 25 but I act like I'm 12.

Offline

 

#4  2011-08-09 07:57:58

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Python i tdd

Co znaczy "nie robiło zupełnie nic" ? A co ma niby to robić? Odpalasz konstruktor i patrzysz czy nie leci wyjątek i tyle. Leci test się udał, nie leci nie udał. Nie ma wielkiej filozofii. Nie rozumiem z czym masz problem.

Offline

 

#5  2011-08-10 18:26:08

  HAL9000 - Użytkownik

HAL9000
Użytkownik
Zarejestrowany: 2006-04-22

Re: Python i tdd

Człowieku! Zrozum, że efekt był identyczny.
(Początkowy było po prostu
Point dopiero później zmieniłem na Point.__init__)
czyli bez znaczenia czy parametr był typu char, strong czy int zawsze przechodziło pomyślnie test. Wpisałem więc najbardziej oczywiste wywołanie tej metody (init) jakie może być (w nadziei, iz może coś to poprawi wyświetli jakiś błąd, ostrzeżenie cokolwiek co mnie naprowadzi na rozwiązanie dlaczego to działa jak działa czyli w sposób nieprawidłowy)  i nadal jest to samo, ale walić to olałem to jak wszystko co zaczyna mi podnosić ciśnienie ponad normę.


For some reason I'm thinking I'm still 25 but I act like I'm 12.

Offline

 

#6  2011-08-10 21:21:23

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Python i tdd

U mnie działa OK, czyli tak:

Kod:

   
def test_for_bad_data(self):
        d={'x':'2', 'y':'3'}
        self.assertRaises(TypeError, Point, **d)

jest ok, leci wyjątek, test przechodzi. a np. tak:

Kod:

   
def test_for_bad_data(self):
        d={'x':2, 'y':3}
        self.assertRaises(TypeError, Point, **d)

nie ma wyjątku, test się wywala gdyż go oczekuje. Więc trochę nie rozumiem twoich problemów ;]

Offline

 

#7  2011-08-10 22:56:00

  HAL9000 - Użytkownik

HAL9000
Użytkownik
Zarejestrowany: 2006-04-22

Re: Python i tdd

Widze , że jesteś oddany spawie bardziej aniżeli ja ;-) gdyż ja juz dawno odpuściłem., ale dobra jutro jak znajdę chwilę czasu spróbuję ponownie, bo jak mi "zaświtało" w głowie to może być kwestia tych chorych plików pyc. Kiedyś się głowiłem dlaczego jeden program nie zachowuje się tak jak powinien a jak się później okazało python zamiast uaktualnić ten plik zgodnie z zawartością pliku py ciągle wykonywal pierwotną wersję programu z pliku py najwyraźniej nie uaktualniając zawartości pyc buk (takie drzewo) jeden wie dlaczego, więc to może być winowajca ale głowy nie dam. W pierwotnej wersji rzeczywiście były argumenty typu char więc przyczyna tego zawsze zdanego testu może być tam pogrzebana.


For some reason I'm thinking I'm still 25 but I act like I'm 12.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)