看代码的同时简单的总结一下busted整个“类”的UML图(水平有限,类图有问题的话,欢迎指正),加深理解,busted中类和类之间的关系是基于lua文件和require语句设定的,类比于面向对象 编程。
其实lua中除了使用__index、__newindex等元方法模拟面向对象中的继承、多态之外,还可以使用require语句进行模拟;详细可以参见outputHandler目录。
代码的执行顺序:
busted源文件bin目录下的busted,打开之后内容如下:
require 'busted.runner'({ standalone = false })
会发现busted执行是从busted/runner.lua中开始,require机制简单说就是会根据“模板式的路径”来查找当前加载的文件存不存在,模板式的路径中会包含替代符号“?”,这个“?”会被require后的名称所替代,比如典型的路径如下:
"./?.lua;./?.lc;/usr/local/?/init.lua"
将“?”替换之后会生成诸如此类的模板式的路径,然后去找这个文件,如果存在则加载。
"./busted/runner.lua;
./busted/runner.lc;
/usr