如何在ruby模块中包含单元测试?

phi*_*ant 5 ruby unit-testing module testunit modulino

我正在尝试将模块的单元测试包含在与模块本身相同的源文件中,遵循Perl modulino模型.

#! /usr/bin/env ruby

require 'test/unit'

module Modulino
    def modulino_function
        return 0
    end
end

class ModulinoTest < Test::Unit::TestCase
    include Modulino
    def test_modulino_function
        assert_equal(0, modulino_function)
    end
end
Run Code Online (Sandbox Code Playgroud)

现在,我可以运行执行此源文件的单元测试.

但是,当我需要/从另一个脚本加载它们时,它们也会运行.如何避免这种情况?

有没有更惯用的方法来实现Ruby,除非不鼓励这种做法?

sam*_*amg 11

就个人而言,我从来没有听说有人试图在Ruby中这样做.这绝对不是标准做法.那说你可以利用这个技巧:

if __FILE__ == $0
  # Do something.. run tests, call a method, etc. We're direct.
end
Run Code Online (Sandbox Code Playgroud)

if块中的代码仅在文件直接执行时执行,而不是在另一个库或应用程序需要时执行.

更多红宝石技巧:http://www.rubyinside.com/21-ruby-tricks-902.html