Тестирование патча к MySQL-адаптеру Rails - PullRequest
0 голосов
/ 09 марта 2010

Я написал небольшой monkeypatch для MySQLAdapter на Rails и хочу упаковать его, чтобы использовать в других моих проектах. Я пытаюсь написать несколько тестов для этого, но я все еще новичок в тестировании, и я не уверен, как это проверить. Может ли кто-нибудь помочь мне начать?

Вот код, который я хочу проверить:

unless RAILS_ENV == 'production'
      module ActiveRecord
        module ConnectionAdapters
          class MysqlAdapter < AbstractAdapter
            def select_with_explain(sql, name = nil)
              explanation = execute_with_disable_logging('EXPLAIN ' + sql)
              e = explanation.all_hashes.first
              exp = e.collect{|k,v| " | #{k}: #{v} "}.join
              log(exp, 'Explain')
              select_without_explain(sql, name)
            end

            def execute_with_disable_logging(sql, name = nil) #:nodoc:
              #Run a query without logging
              @connection.query(sql)
            rescue ActiveRecord::StatementInvalid => exception
              if exception.message.split(":").first =~ /Packets out of order/
                raise ActiveRecord::StatementInvalid, "'Packets out of order' error was received from the database. Please update your mysql bindings (gem install mysql) and read http://dev.mysql.com/doc/mysql/en/password-hashing.html for more information.  If you're on Windows, use the Instant Rails installer to get the updated mysql bindings."
              else
                raise
              end
            end
            alias_method_chain :select, :explain
          end
        end
      end
    end

Спасибо.

1 Ответ

0 голосов
/ 10 марта 2010

Общее тестирование

Вы можете начать читать о тестировании .

После того, как вы поймете основы тестирования, вы должны подумать, что вы изменили. Затем сделайте несколько тестов, которые проверяют на

  • исходная ситуация, приводящая к ошибкам с момента ее обновления. Поэтому отмените тест после того, как он действительно сработает для исходной ситуации.
  • новая ситуация, чтобы увидеть, правильно ли вы реализовали свою идею

Самое сложное - убедиться, что вы рассмотрели все ситуации. Наконец, если обе части пройдут, вы можете сказать, что ваш код работает как положено.

Тестирование драгоценных камней

Для проверки драгоценных камней вы можете запустить

rake test:plugins

для тестирования всех плагинов вашего приложения rails (см. Подробнее в главе 6 руководства по тестированию ), это работает, только когда гем находится в каталоге vendor приложения.

Другая возможность - изменить Rakefile драгоценного камня, включая задачу тестирования. Например это

desc 'Test my custom made gem.'
Rake::TestTask.new(:test) do |t|
  t.libs << 'lib'
  t.libs << 'test'
  t.pattern = 'test/**/*_test.rb'
  t.verbose = true
end

будет запускать все доступные тесты в каталоге test, заканчивающемся _test.rb. Для выполнения этого теста вы можете набрать rake test (из каталога gem!).

Чтобы запустить тесты для драгоценного камня по умолчанию (при вводе просто rake), вы можете добавить / изменить эту строку:

task :default => :test

Я использовал второй метод в своем геме

ruby-bbcode , чтобы вы могли взглянуть на него, чтобы увидеть полный пример.

...