Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
assert_no_match(regex, string) # assert(regex string)assert_nil(object) # assert(object.nil?)assert_not_nil(object) # assert(!object.nil?)Некоторые утверждения носят более объектно-ориентированный характер:
assert_instance_of(klass, obj) # assert(obj.instance_of? klass)assert_kind_of(klass, obj) # assert(obj.kind_of? klass)assert_respond_to(obj, meth) # assert(obj.respond_to? meth)Другие относятся к исключениям и символам, которые генерируются методом
throwassert_nothing_thrown { ... } # Не было throw.assert_nothing_raised { ... } # Не было raise.assert_throws(symbol) { ... } # Символ в результате throw.assert_raises(exception) { ... } # Исключение в результате raise.Есть еще несколько утверждений, но эти применяются чаще всего и отвечают почти всем потребностям. Дополнительную информацию можно найти в онлайновой документации на сайте http://ruby-doc.org.
Имеется еще метод
flunkЕсли при запуске тестового файла вы ничего специально не указываете, то по умолчанию вызывается консольный исполнитель тестов. Это возвращает нас к старой доброй технологии 1970-х годов. Имеются и другие исполнители, например графический
Test::Unit::UI::GTK::TestRunnerrunclass MyTests < Test::Unit::TestCase # ... end# Явное указание исполнителя тестов...runner = Test::Unit::UI::Console::TestRunnerrunner.run(MyTests)Параметром может быть любой объект, обладающий методом
suiteПознакомимся к понятием комплекта тестов ближе. Оказывается, комплект тестов может состоять из набора тестов или набора подкомплектов. Следовательно, можно сгруппировать тесты так, что будет прогоняться либо только один набор, либо сразу все.
Пусть, например, есть три набора тестов, и вы хотите прогнать их как единый комплект. Можно было бы поступить так:
require 'test/unit/testsuite'require 'tc_set1'require 'tc_set2'require 'ts_set3'class TS_MyTests def self.suite mysuite = Test::Unit::TestSuite.new mysuite << TC_Set1.suite mysuite << TC_Set2.suite mysuite << TS_Set3.suite return mysuite endendTest::Unit::UI::Console::TestRunner.run(TS_MyTests)Но такая сложность ни к чему. Имея отдельные наборы тестов, библиотека
Test::Unitrequire 'test/unit'require 'tc_set1'require 'tc_set2'require 'ts_set3'Библиотека
Test::Unit16.2. Комплект инструментов ZenTest
Этот великолепный инструментарий написал Райан Дэвис (Ryan Davis). Основной инструмент (
zentestТестируемый класс (class under test — CUT) служит основой тестового класса (test class — ТС). На каждом уровне области видимости в начало имени класса добавляется строка
Testtest_==class Alpha class Beta attr_accessor :foo, :bar def initialize end def foo? @foo end end def initialize end def process end def process! end def ==(other) end def ===(other) endendПосле запуска команды
zentest file.rb >tfile.rb# Code Generated by ZenTest v. 3.2.0# classname: asrt / meth = ratio%# Alpha::Beta: 0 / 7 = 0.00%
