2013-03-06 5 views
2

Я только что начал изучать Ruby на прошлой неделе, поэтому, пожалуйста, несите меня на этом.Unit Test with Ruby 1.9.3

Я использую Ruby 1.9.3. У меня проблемы с попыткой выполнить мой модульный тест, и я пробовал последние 2 дня, но мне не удалось успешно выполнить мой модульный тест.

Вот код для моего простого класса калькулятора:

class Calc 
def initialize 
end 

def Add(leftOp, rightOp) 
    return (leftOp + rightOp) 
end 

def Sub(leftOp, rightOp) 
    return (leftOp - rightOp) 
end 

def Div(leftOp, rightOp) 
    if(rightOp == 0) 
     raise ArgumentError.new("Divided by 0") 
    else 
     return (leftOp/rightOp) 
    end 

    def Mult(leftOp, rightOp) 
     return (leftOp * rightOp) 
    end 
end 

myCalc = Calc.new 
puts "2 + 3 = " + myCalc.Add(2, 3).to_s 
puts "2 - 3 = " + myCalc.Sub(2, 3).to_s 
puts "2 * 3 = " + myCalc.Mult(2, 3).to_s 
puts "6/3 = " + myCalc.Div(6, 3).to_s 
puts "10/0 = " + myCalc.Div(10, 0).to_s 

Это прекрасно работает. Все выходы распечатываются, как ожидалось. Теперь я хочу написать модульный тест для этого класса. Ниже приведен код для модульного тестирования:

require 'test/unit' 
require 'test/unit/ui/console/testrunner' 
require 'Calc' 

class Test_Calc < Test::Unit::TestCase 
    def setup 
     myCalc = Calc.new 
     @result_1 = myCalc.Add(5, 8) 
     @result_2 = myCalc.Sub(9, 15) 
     @result_3 = myCalc.Mult(8, 6) 
     @result_4 = myCalc.Div(18, 3) 
     @result_5 = myCalc.Div(2, 0) 
    end 

    def test_Add 
     assert_equal(@result_1, 13) 
    end 

    def test_Sub 
     assert_equal(@result_2, -6) 
    end 

    def test_Mult 
     assert_equal(@result_3, 48) 
    end 

    def test_Div 
     assert_equal(@result_4, 6) 
    end 

    def test_Div_Zero 
     assert_match("\Divided by 0\", e.message) 
    end 
end 

Test::Unit::UI::Console::TestRunner.run(Test_Calc) 

Когда я запустил этот тест блок, он выплюнул эту ошибку

enter image description here

Файл Calc.rb находится в той же директории test_Calc.rb. Почему он этого не видит? Я даже пытался скопировать файл Calc.rb в тот же каталог файла «custom_require.rb» («lib/ruby ​​/ site_ruby/1.9.1/rubygems»), но это не помогло.

После поиска по всему Интернету я узнал, что Test :: Unit удален и заменен MiniTest (!). Итак, я попробовал MiniTest вещь, как следует:

require 'minitest/unit' 
require 'Calc' 
class Test_Calc < MiniTest::Unit::TestCase 
    #Test_Calc definition 
end 
MiniTest::Unit.autorun 

Я до сих пор вернулся точно такую ​​же ошибку, как и раньше, так что, может быть, я делаю что-то не так с MiniTest вещи.

Я даже следовал примеру со следующего сайта, но, похоже, он не работал в моем случае. Даже если у меня есть полностью определенный класс (Calc.rb), я до сих пор получил «Calc - (LoadError)».

http://www.ibm.com/developerworks/opensource/tutorials/os-ruby1/section3.html

После поиска по всей сети снова, я узнал, что тест :: блок был доступен как драгоценный камень для обратной совместимости, и поэтому я скачал и установить тест-блок-2.5.4.gem из ссылка ниже:

http://rubygems.org/gems/test-unit

Даже после установки драгоценного камня, он по-прежнему не работает (я проверил, чтобы убедиться, что камень был установлен в «Ruby193 \ Lib \ рубин \ драгоценный камень \ 1.9.1 \ драгоценных камней»). Ruby все еще жаловался, что он «не может загрузить такой файл - Calc (LoadError)»

Итак, как мне запустить тестовый блок? Что мне не хватает?

Заранее благодарю вас за помощь.

Обновлено:

После включения, как предложил Блейн, я получил следующее новое сообщение об ошибке "\ Calc.":

enter image description here

Ну, по крайней мере, признает класс Calc это время , и он начал загрузку набора тестов.

+0

Вы пробовали 'требовать»/Calc'' – BlackHatSamurai

+2

Не размещайте изображения текста, вместо того, чтобы скопировать и вставить фактический текст прямо в свой пост. , Изображения текста нелегко разбираются, доступны для поиска или доступны. –

+0

согласен с @AndrewMarshall: TATN, вы сделали свой вопрос un-googlable (по крайней мере, частью сообщения об ошибке), и это позор. –

ответ

3

Во-первых, если программа говорит, что не может найти файл, сделать ваш требуйте выглядеть следующим образом: require './Calc'

Во-вторых, убедитесь, что вы используете последнюю версию MiniTest камень. Вы можете это проверить:

gem list 

Версия будет справа от списка. На сегодняшний день текущая версия - 4.6.1. Если ваша версия не является правильным, обновить его, выполнив:

gem install --version '4.6.1' (or whatever the version is) 
+0

Вы имели в виду, что я пропустил символ новой строки для операторов запроса? У меня есть все 3x требующие утверждения на 3 разных строках. – TATN

+0

Нет, у меня была аналогичная проблема, и мне пришлось включить './Filename', поэтому в основном попробуйте поставить'./'Перед' calc', чтобы получить './Calc'. – BlackHatSamurai

+0

Также добавьте символ '@' перед результатом. См. Мой обновленный ответ. – BlackHatSamurai