Споделяне на UnitTests

  1. Идеята да пусна някой чужд UnitTest на кода си ми се вижда доста съблазнителна. Тъй като ми се струва, че това не противоречи на някакви установени правила мога да покажа моя малък тест за първата задача. Той е просто малко разширение на публикувания.
    Приятно тестване :) Споменете ако има нещо нередно из него.

    Публикувано преди повече от 4 години
  2. На test_lambda_filters няма да е лошо да сортираш това което сравняваш, понеже реда няма значение. ;)

    Публикувано преди повече от 4 години
  3. Не съм сигурен дали може да се сортира масив от символи (даде грешка при мен).

    Ъпдейт. Под “не съм сигурен дали може да се сортира масив от символи” имах предвид, че неможе да се викне .sort на масива (от цял ден писане на руби човек се уморява все пак).

    Публикувано преди повече от 4 години
  4. Може, може [:classical, :baroque, :popular, :piano, :polyphony].sort_by {|tag| tag.to_s}

    Публикувано преди повече от 4 години
  5. Матей ми взе думите от… пръстите.

    Засега позволяваме споделяне на тестове.

    Публикувано преди повече от 4 години
  6. В примерните тестове има място за малко допълване

    def test_get_tags_and_iterator
    songs = @collection.find(:song, :tags => [:jazz, :piano!, :saxophone!])
    songs.each do |song|
    assert_equal “Miles Davis”, song.artist
    end
    end

    Това има нужда от едно
    assert songs.size > 0
    Иначе не гърми при празен масив, а грешката ми беше точно в кода за таговете :)

    Публикувано преди повече от 4 години
  7. Идеята за споделянето на тестове е добра :). След корекция да ги сортира в test_lambda_filters, всичко е ОК :) , не разбрах обаче посленото с assert songs.size > 0

    Аз правих един който тества списък от анонимни функции и yield-ване само на определено поле, не на цялата песен, но мисля че всичко е стандартно :)

    Публикувано преди повече от 4 години
  8. @Пламен, Мишо има предвид, че така написано:

    def test_get_tags_and_iterator
      songs = @collection.find(:song, :tags => [:jazz, :piano!, :saxophone!])
      songs.each do |song|
        assert_equal “Miles Davis”, song.artist
      end
    end

    няма да се изпълни нито една асертация, ако songs е празен списък, а ние не очакваме да получим празен списък, затова е добре да проверим и дали това е така:

    def test_get_tags_and_iterator
      songs = @collection.find(:song, :tags => [:jazz, :piano!, :saxophone!])
      assert songs.size > 0
      songs.each do |song|
        assert_equal “Miles Davis”, song.artist
      end
    end

    Публикувано преди повече от 4 години
  9. Аха, благодаря за разяснението, така определено е по-правилно.

    Публикувано преди повече от 4 години
  10. @Мишо и Димитър, само че такъв тест не виждам в примерните? Мисля, че идеята на test_get_tags_and_iterator е да се викне блока след това, а не да се тества each-а на Array.
    Теста в оригинал е такъв:

      def test_get_tags_and_iterator
        @collection.find(:song, :tags => [:jazz, :piano!, :saxophone!]) do |song|
          assert_equal "Miles Davis", song.artist
        end
      end

    По-скоро трябва да се промени така

      def test_get_tags_and_iterator
        songs = @collection.find(:song, :tags => [:jazz, :piano!, :saxophone!]) do |song|
          assert_equal "Miles Davis", song.artist
        end
        assert songs.size >0
      end

    Така хем ще се викне блока, хем ще изгърми за празен списък.

    Публикувано преди повече от 4 години
  11. Ама той списъка трябва да е празен, ако find се викне с блок! Даже не трябва да има списък find трябва да върне nil
    това
    assert songs.size >0
    е грешно

    цитат от спецификацията:
    “Ако find се извика с блок, вместо да връща масив, той трябва да yield-не всички стойности на блока си. Редът няма значение. Ако find е извикан със :song , тогава yield-ва песни. Ако е извикан с :name, yield-ва имена на песни и т.н.”

    Публикувано преди повече от 4 години
  12. Сякаш настана малко объркване.

    @Мирослав, коментарът беше за посочения от мен метод, който се намира не в примерния тест, а в теста, пуснат първоначално от Дойчин. За твое спокойствие, може да преименуваш новия тест, който ние коментирахме, някак и да си запазиш оригиналния тест test_get_tags_and_iterator. Повече тестове, по-добре :)

    Публикувано преди повече от 4 години
  13. Незнам, аз и в неговия не виждам такъв ама както и да е… :) Та въпроса е, че ако имаме блок нали трябва да yield-ваме всяка от намерените стойности в блока, а ако намерените стойности са празен списък, тогава не yield-ваме нищо и пак не се викат assertion-и.
    А иначе нищо не пречи на find да върне нещо, но както пише в темата за въпросите по първа задача на никой не му пука за това :)
    Така или иначе, който тествал – тествал.

    Публикувано преди повече от 4 години
  14.   def test_get_tags_and_iterator
        count = 0
        songs = @collection.find(:song, :tags => [:jazz, :piano!, :saxophone!]) do |song|
          assert_equal "Miles Davis", song.artist
          count += 1
        end
        assert_equals 4, songs.size
      end

    Ако държите да сте педантични. Иначе, човека със странния мустак и странната коса е прав – който тествал, тествал.

    Публикувано преди повече от 4 години
  15. Дойде време за новият ми малък тест :)
    Надявам се на някого да му е полезен. За съжаление не ми хрумна нищо особено интересно да сложа в него.
    А най – хубавия резултат от всички ще е някой да забележи грешка в логиката на теста ми, която ще означава грешка в разбирането ми на условието :)

    Публикувано преди повече от 4 години
  16. Дойчине, мерси много за тестчето!
    Лъснаха ми 2 грешки които стандартния тест не беше хванал (няма да се учудя ако има и други де – така и не си направих мой си тест :P)
    Иначе, мисля че правилно си разбрал условието, или поне и аз го разбирам по същия начин като теб.

    Аааа и много хитро си се сетил да го направиш тоя test_misc :)
    Първоначално си помислих че нещо е сбъркан, докато накрая не се усетих че проблемът е в моя телевизор :D

    Публикувано преди повече от 4 години
  17. Ами.. Не е много добра идея, но понеже съм много, много благодарен за теста на Дойчин, понеже ми хвана бъг в to_s, както и онзи бъг в test_misc :) считам, че е добре да споделя и аз нещо в замяна (макар и да не е много) (mix на моите тестове с неговите и малки добавки).

    Публикувано преди повече от 4 години
  18. Няма нужда да поддържате 11 + Poly.new([1, 1]). Признавам, че теста за копиране на речника е хитър. Спаси много хора :-)

    Публикувано преди повече от 4 години
  19. Открих още два проблема в полинома си, които предишния ми тест не хващаше. Прибавих тестове за тях в ‘community’ теста на Митко. Получи се това ;)

    Публикувано преди повече от 4 години
  20. Пратих още един тест на Дойчин и той го добави във този към който има линк в предния пост. Така че може да го пуснете пак :)

    Публикувано преди повече от 4 години
  21. Искам да обърна внимание на условието за poly.to_s — коефициент пред x, който е единица, се пропуска; но това е казано експлицитно само за единица, а не за -1! Тоест, полиномът Poly.new({1 => -1}).to_s би трябвало да връща -1x (според условието). Вярно е, че по-логичното е -x, но пък е и по-логично да се връща “0” за празен полином, а не "", но пак – условието. :)

    Това трябва да се изясни.

    Публикувано преди повече от 4 години
  22. полиномът Poly.new({1 => -1}).to_s би трябвало да връща -1x (според условието)

    Погледни си пак условието — там пише по модул, но тъй като остана малко време до края, ще гледам да няма такъв тест.

    Публикувано преди повече от 4 години
  23. Благодаря за тестовете, позакърпиха to_s-а. Не мога да разбера, обаче, на 80-ти ред теста защо пък трябва find да връща nil.

    Публикувано преди повече от 4 години
  24. Благодаря за тестовете… хванаха ми бая грешки, явно не ме бива в писане на юнит-тестове.
    Мисля че в миск теста може да добавите:
    b = [1,2]
    pol2 = Poly.new(b)
    pol2[100_] = 5
    assert_equal( [1,2], b )

    … за да се тества и конструйрането от списък за този проблем.

    Публикувано преди повече от 4 години
  25. @Ясен: Защото find, sort_by и map приемат, че степените с нулев коефициент ги няма ( в условието ). Т.е. pol.find{ |pow,coef| coef == 0 } задължително връща nil. A в случая на 80-ти ред коефициента пред първата степен е 0, т.е. и pow == 1 също се отнася за моном с коефициент 0.

    @Лъчезар: Идеята е ясна. Не е практично да се опитваме да проверим всички варианти на една и съща грешка. Пък и нямам симпатии към хора, които имат желанието да пазят огромни масиви, потенциално несъдържащи никаква значеща информация :)

    offtopic: някой трябва да ми обясни как се ползват разните екстрички като bold, italics и блокове за код тук :) Явно не съм особено схватлив…

    Публикувано преди повече от 4 години
  26.  
    { { { # без space
    код 
    } } } # без space

    Публикувано преди повече от 4 години
  27. Мерси :)

    Публикувано преди повече от 4 години
  28. Textile останалото.

    Публикувано преди повече от 4 години

Нов отговор

Трябва да сте вътре за да отговаряте.