Ruby 无废话 Ruby 编程 (中级篇:单元测试)

chenge · 2014年03月21日 · 最后由 billy 回复于 2014年03月21日 · 4561 次阅读

简单说明

这个所谓的中级是我定的,我写着玩,你看着玩,别太较真。

单元测试的概念已经普及了,具体怎么测试要看项目和开发者对测试的偏好。

欢迎对单元测试的高见。

测试理论

关系示意图如下

---》测试对象-------------》依赖对象
incoming               outgoing

测试对象和依赖对象,依赖对象一般用 mock 来写。 incoming 测试状态,outgoing command 测试行为。outgoing query 不用测试。

参见代码,test_msg 方法先是测试了 outgoing 的行为,用的是 mock 和 verify。后面测试 incoming 的状态。

需要安装 minitest gem。


require 'minitest'
require 'minitest/autorun'

class TestMan < MiniTest::Test
    def test_msg
        manager = MiniTest::Mock.new
        manager.expect(:get_name!,  'john',[1]) 
        man = Man.new(1, manager)
        manager.verify

        msg = man.msg
        assert_equal msg, 'hi john'
    end

    def test_manager_name
        manager = Manager.new
        assert_equal manager.get_name!(01), 'john'
    end
end

class Man
    def initialize(i,manager)
        @name = manager.get_name! i
    end
    def msg
        "hi #{@name}"
    end
end

class Manager
    def get_name!(i)
        @checked ||= []
        @checked[i] = true

        ['joe', 'john'][i] 

    end
end

单元测试,还是要 RSpec

楼主基本功还是有待提高。说句不客气的话,你自己写着笔记就好了,不好当作“教程”的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号