如何在不运行脚本的情况下在ruby脚本中对函数进行单元测试

时间:2010-10-11 22:35:52

标签: ruby unit-testing

鉴于带有一堆函数的ruby脚本,如何在不运行脚本本身的情况下对脚本中的函数进行单元测试? Here是一个示例脚本,here是其单元测试。

例如,在我的单元测试中使用require或load会导致脚本在测试执行之前执行。我有很多这样的脚本,我真的更喜欢它们保持不变。

我想我可以将文件作为字符串加载,将其切换到内存中并运行eval - 如果可行的话,这感觉就像是一个糟糕的解决方案。

非常感谢任何想法或建议的策略。

2 个答案:

答案 0 :(得分:9)

通常你将实际运行脚本的最后几行放在 guard 中,如下所示:

if $0 == __FILE__
  # do stuff
end

即。如果第一个参数是这个文件,那么它将作为脚本运行,并且将执行“stuff”;否则只会加载方法定义。

答案 1 :(得分:1)

我喜欢做的是将可执行部分限制为只是对象的实例化,或者甚至只是单个类方法调用(可能传递cmd行args)。然后编写一个将由脚本调用的类或一系列类方法,但可以单独和单独测试。

这使得TDD变得容易,并且更容易在其他地方重复使用。