Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Трудно Тестване [RogueConf/RougeConf 2014]

Трудно Тестване [RogueConf/RougeConf 2014]

Лекция, в която давам примери за проблеми, при които не е съвсем очевидно как да подходим с тестването. Предлагам идеи за това как може да се подходи в подобни ситуации.

Andrew Radev

March 30, 2014
Tweet

More Decks by Andrew Radev

Other Decks in Programming

Transcript

  1. waiting-on-rails • Подпроцес за rails, четем изхода • Подпроцес за

    музиката • Следим изхода на rails, убиваме музиката • Тестове?
  2. Vim

  3. FDD

  4. class Line def draw(image) dx = (x2 – x1).to_f dy

    = (y2 – y1).to_f (x1 .. x2).each do |x| y = (y1+dy*(x-x1)/dx).round draw_point(image, x, y) end end end
  5. it "draws a slanted line" do image = make_image(100, 100)

    line = Line.new(from:[20,30], to:[80,50]) line.draw(image) Image[20,30].should eq color('black') Image[80,50].should eq color('black') end
  6. specify "dark pixels are only on the line" do line.draw(image)

    (20 .. 80).each do |y| (30 .. 50).each do |x| tint = gray(image[x, y]) distance = line.distance(x, y).abs if distance > 1 tint.should eq gray(color('white')) elsif distance == 0 tint.should_not eq gray(color('white')) end end end end
  7. take5 :: [Char] -> [Char] take5 = take 5 .

    filter (`elem` ['a'..'e']) *A> quickCheck (\s -> length (take5 s) <= 5) OK, passed 100 tests.
  8. RNG

  9. it "has a correct mean value" do ns = 10_000.times.map

    { get_random_number } ns.mean.round(2).should eq 0.50 end