Ruby 使用define_方法创建动态测试单元用例也会运行占位符值

Ruby 使用define_方法创建动态测试单元用例也会运行占位符值,ruby,testunit,Ruby,Testunit,因此,我使用创建了一组可以并发运行的测试用例 我在yaml中指定了测试用例名称,并通过并行过程将每个测试用例名称分配给全局var$t 然后我使用define_方法为每个测试单元测试用例定义唯一的方法名称。如果没有唯一的方法名,测试单元将出现错误,测试用例被重新定义错误 我看到的是,每个测试用例名称都被解析,测试正在运行,返回适当的测试单元结果——测试运行顺利,并且正确结束 然而,在测试运行结束时,我在testcase上看到一个未定义的方法错误,这是define_method占位符变量,即defi

因此,我使用创建了一组可以并发运行的测试用例

我在yaml中指定了测试用例名称,并通过并行过程将每个测试用例名称分配给全局var$t

然后我使用define_方法为每个测试单元测试用例定义唯一的方法名称。如果没有唯一的方法名,测试单元将出现错误,测试用例被重新定义错误

我看到的是,每个测试用例名称都被解析,测试正在运行,返回适当的测试单元结果——测试运行顺利,并且正确结束

然而,在测试运行结束时,我在testcase上看到一个未定义的方法错误,这是define_method占位符变量,即define_methodtestcase

我不明白它为什么要运行占位符变量——我也不知道如何阻止它这样做

这里是错误

: undefined method `testcase' for TestCase:Class (NoMethodError)
    from build/sanity.rb:16:in `block (2 levels) in <main>'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:386:in `call'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:386:in `call_with_index'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:315:in `process_incoming_jobs'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:298:in `block in worker'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:291:in `fork'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:291:in `worker'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:279:in `block in create_workers'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:278:in `each'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:278:in `create_workers'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:242:in `work_in_processes'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:114:in `map'
    from /Users/[user]/.rvm/gems/ruby-2.1.2/gems/parallel-1.0.0/lib/parallel.rb:81:in `each'
    from build/sanity.rb:13:in `block in <main>'
下面是相关的ruby代码

Parallel.each($testcases, :in_processes=>26) { |m|
        $t = m["testName"]

        class TestCase < Test::Unit::TestCase
            define_method("testcase") do
                send($t)
            end

            testcase("test_#{$t}")
        end
    }
对这里实际发生的事情以及我可能缺少的基本概念的任何洞察都是值得赞赏的。

我最终删除了testcasetest{$t},并将变量字符串直接放入define方法中

我不知道为什么会这样。如有任何见解,将不胜感激

Parallel.each($testcases, :in_processes=>26) { |m|
    $t = m["testName"]

    class TestCase < Test::Unit::TestCase
        define_method("test_#{$t}") do
            send($t)
        end
    end
}