我正在尝试使用 Ruby 在 Windows 中进行一些脚本化的 GUI 测试。我正在利用一本pragprog 书的指导,但遇到了一些障碍。我已经提取了一些代码来帮助重复映射 win32api 函数。代码如下:
module WindowsGui
def self.def_api(function, parameters, return_value)
api = Win32API.new 'user32', function, parameters, return_value
define_method(function.snake_case) do |*args|
api.call *args
end
end
end
...所以我可以使用该块以以下方式在模块中定义几个 win32API:
def_api 'FindWindow', ['P', 'P'], 'L'
我已经进行了一些 RSpec 测试以确保其行为正常。
it 'wraps a Windows call with a method' do
find_window(nil, nil).should_not == 0
end
it 'enforces the argument count' do
lambda {find_window}.should raise_error
end
第一次测试一切正常,第二次导致段错误。似乎如果我在没有参数的情况下调用它,我就无法触摸 *args - 但我可以做一个 args.length 来查看它是空的。
为什么这会导致段错误而不是异常?通过类似的方式解决这个问题是否可以接受?
raise BadArgs if args.length == 0
还有一个问题太长了——抱歉。
蒂亚!鲍勃