前几天看了Google Testing Blog上的一篇文章讲到C++因为没有反射机制,所以如何注册测试用例就成了一件需要各显神通的事情。从我的经验来看,无论是Google的GTest还是微软的LTM,都是通过宏来解决问题。但是对于Ruby之流的动态语言,这种事情太小菜一叠了。请看以下代码例子:
1 class Test 2 def test_001 3 puts 'test_001' 4 end 5 6 def test_002 7 puts 'test_002' 8 end 9 end10 11 t = Test.new12 test_methods = t.public_methods.grep(/^test_/) # 把所有test_开头的方法找出来。13 test_methods.each do |test|14 t.send(test) # 执行每个测试用例。15 end
有兴趣的同学可以自己去考察一下Ruby单元测试框架的实现,不了解元编程的话可以参考Metaprogramming Ruby。