Panowie to jest mój kod:
class Rectangle
attr_reader :height, :width
def initialize(h = 0, w = 0)
raise ArgumentError.new('Wysokość musi być liczbą dodatnią.') unless
(h.is_a? Numeric) && (h > 0)
raise ArgumentError.new('Szerokość musi być liczbą dodatnią.') unless
(w.is_a? Numeric) && (w > 0)
@height = h, @width = w
end
def perimeter
(@height + @width) * 2
end
def is_square?
if @height == @width then
true
else
false
end
end
end #Koniec definicji klasy Rectangle.
#Dołączenie biblioteki testującej:
require 'minitest/autorun'
#Definicja klasy testującej:
class TestRectangle < MiniTest::Unit::TestCase
def test_is_square
assert(true, Rectangle.new(6, 6).is_square?)
assert(true, !Rectangle.new(3.58, 1234).is_square?)
end
def test_perimeter
assert_equal(48, Rectangle.new(20, 4).perimeter)
assert_equal(48, Rectangle.new(4, 20).perimeter)
end
def test_create_rectangle
assert_instance_of(Rectangle, Rectangle.new(1,2))
assert_equal(5, Rectangle.new(5, 8).height)
assert_equal(8, Rectangle.new(5, 8).width)
assert_nothing_raised do
r = Rectangle.new(3, 4)
puts r.height
puts r.width
puts r.perimeter
puts r.is_square?
end
assert_raise(ArgumentError) { Rectangle.new(3) }
assert_raise(ArgumentError) { Rectangle.new(-1, 2) }
assert_raise(ArgumentError) { Rectangle.new('kot', 6) }
end
end
Czy tego typu kod jest kodem zgodnym z Ruby 2.0? Jak już mówiłem uczę się z książki gdzie jest ruby 1.9 ale teoretycznie mi to działa pomijając to ze zamiast
-'require ‘test/unit’ musialem dać 'require ‘minitest/autorun’ (znalazłem to w internecie)
-
w zwykłym assert pojawiło się true:
assert(true, Rectangle.new(6, 6).is_square?)
i tak naprawde nie wiem po co ono jest. myślałem że można je zmienić na false jeżeli robi się test zwracający false. Próbowałem - nie da się
co jeszcze mnie zastanawia to konsola drukuje mi następujący test:
MiniTest::Unit::TestCase is now Minitest::Test. From testing.rb:35:in `<main>'
Run options: --seed 22115
# Running:
FE.
Finished in 0.001768s, 1696.8700 runs/s, 2262.4933 assertions/s.
1) Failure:
TestRectangle#test_create_rectangle [testing.rb:49]:
Expected: 5
**Actual: [5, 8]**
2) Error:
TestRectangle#test_perimeter:
TypeError: no implicit conversion of Fixnum into Array
**testing.rb:17:in `+'
testing.rb:17:in `perimeter'
testing.rb:43:in `test_perimeter'**
3 runs, 4 assertions, 1 failures, 1 errors, 0 skips
Pogrubione mnie zastanawia i nie umiem odnaleźć błędu w metodzie. W pierwszym dlaczego actuall jest jakąś tablicą a nie zwykłą zmienną? A drugie to w ogóle WTF xD
Mam nadzieje że macie do mnie cierpliwość Pozdro i z góry dzięki ;]