这个所谓的中级是我定的,我写着玩,你看着玩,别太较真。
单元测试的概念已经普及了,具体怎么测试要看项目和开发者对测试的偏好。
欢迎对单元测试的高见。
关系示意图如下
---》测试对象-------------》依赖对象
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