Проблема тестового случая при обработке исключения - PullRequest
0 голосов
/ 11 августа 2009

У меня есть следующий код с соответствующим контрольным примером:

class XXX
    attr_accessor :source
    def check
        begin
            raise ArgumentError, "No source specified." \
                unless @source.empty? != true
            puts "Passed"
        rescue
            print "Error: ",$!, "\n"
        end
    end
end

class TestXXX < Test::Unit::TestCase
    def setup
        @x = XXX.new
    end

    def test_check
        assert_nil(@x.source)
        assert_raise(NoMethodError) { @x.check }
    end
end

Выполнение тестового примера приведет к следующему результату в assert_raise из-за наличия подпрограммы 'rescue':

Started
.Error: undefined method `empty?' for nil:NilClass
F
Finished in 0.01 seconds.

  1) Failure:
test_check:18 exception expected but none was thrown.

1 tests, 2 assertions, 1 failures, 0 errors

Как мне написать тестовый пример для этого сценария, когда я не могу покончить с удалением «спасения» из моего кода?

Комментирование 'спасения' дает мне благоприятный результат.

class XXX
    attr_accessor :source
    def check
        begin
            raise ArgumentError, "No source specified." \
                unless @source.empty? != true
            puts "Passed"
        #rescue
        #    print "Error: ",$!, "\n"
        end
    end
end
Started
..
Finished in 0.0 seconds.

1 tests, 2 assertions, 0 failures, 0 errors

1 Ответ

2 голосов
/ 11 августа 2009

Проверка на фактическое поведение метода. Он не генерирует исключение, которое печатает, так что это то, что вам нужно проверить. Вам, вероятно, нужен объект mock ?

...