【问题标题】:Test case problem when exception handled异常处理时的测试用例问题
【发布时间】:2009-08-11 05:56:31
【问题描述】:

我有以下代码和相应的测试用例:

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 上产生以下结果:

开始 .错误:未定义的方法“空?”对于零:NilClass F 在 0.01 秒内完成。 1) 失败: test_check:18 预期异常,但没有抛出任何异常。 1 次测试,2 次断言,1 次失败,0 次错误

当我无法从代码中删除“救援”时,如何为这种情况编写测试用例?

评论“救援”对我来说是一个有利的结果。

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
开始 .. 在 0.0 秒内完成。 1 次测试,2 次断言,0 次失败,0 次错误

【问题讨论】:

    标签: ruby unit-testing exception-handling


    【解决方案1】:

    测试方法的实际行为。它不会抛出打印的异常,所以这就是您需要检查的内容。你可能需要一个mock 对象?

    【讨论】:

    • 我认为测试方法的实际行为应该是这样的。我实际上是在尝试测试传递给该方法的每个可能的错误输入,看看它是否可以处理它。对不起,红宝石的新手,只是把我的手放在 tdd 上。 :)
    • 测试所有错误的输入肯定是正确的。这就是您检查错误输入的正确行为的方式。
    猜你喜欢
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多