Имате ли въпроси по втора задача?
Не забравяйте да ползвате форумите за да питате неща.
Невероятно прост "framework":
def ok(success, string = nil)
return if success
puts string if string
puts caller.join("\n")
exit(1)
end
Kernel#caller
връща текущия стек като масив от низове
exit(status)
приключва изпълнението със exit code
ok
е дефиниран в Object и е достъпен навсякъдеwatchr
е по-простwatch('rat\.rb') do
system 'clear'
success = system 'ruby rat.rb'
if success
puts 'OK'
else
puts "Tests failed ;("
end
end
Red-Green-Refactor
minitest/unit
rspec
xUnit
SUnit
и в последствие - jUnit
.
minitest/unit
е xUnit библиотекаrequire 'minitest/unit'
class ExampleTest < MiniTest::Unit::TestCase
def test_adding_two_and_two
assert_equal 4, 2 + 2
end
def test_array_push_and_pop
array = []
array.push 1
array.push 2
assert_equal 2, array.pop
assert_equal 1, array.pop
end
end
MiniTest::Unit::TestCase
test_
е тестов метод
assert
-ове
setup
и teardown
, които се викат преди и след всеки тестassert test, message # Проверява, че test е истина
assert artists.include?('Sting'), 'Sting has a song'
assert_equal expected, actual, message # Проверява expected == actual
assert_equal 4, 2 + 2, 'Basic arithmetic'
assert_in_delta expected, actual, delta, message
assert_equal 3.1415, Math::PI, 0.0001
assert_raises(error, &block) # Очаква изключение
assert_raises(KeyError) { {}.fetch :baba }
$ testrb something_test.rb
По време на лекцията написахме повечко код. Можете да намерите крайния резултат в този gist. Имайте предвид, че важното нещо бе процесът на писане, а не крайния резултат. Съответно, кодът е недовършен и не най-добрия възможен.