鉴于带有一堆函数的ruby脚本,如何在不运行脚本本身的情况下对脚本中的函数进行单元测试? Here是一个示例脚本,here是其单元测试。
例如,在我的单元测试中使用require或load会导致脚本在测试执行之前执行。我有很多这样的脚本,我真的更喜欢它们保持不变。
我想我可以将文件作为字符串加载,将其切换到内存中并运行eval - 如果可行的话,这感觉就像是一个糟糕的解决方案。
非常感谢任何想法或建议的策略。
答案 0 :(得分:9)
通常你将实际运行脚本的最后几行放在 guard 中,如下所示:
if $0 == __FILE__
# do stuff
end
即。如果第一个参数是这个文件,那么它将作为脚本运行,并且将执行“stuff”;否则只会加载方法定义。
答案 1 :(得分:1)
我喜欢做的是将可执行部分限制为只是对象的实例化,或者甚至只是单个类方法调用(可能传递cmd行args)。然后编写一个将由脚本调用的类或一系列类方法,但可以单独和单独测试。
这使得TDD变得容易,并且更容易在其他地方重复使用。