Ruby を使用して、Windows でスクリプト化された GUI テストを実行しようとしています。私はpragprog bookのガイダンスを活用していますが、ちょっとした問題にぶつかっています。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
最初のテストではすべてが正常に機能し、2 番目のテストではセグ フォールトが発生します。引数なしでこれを呼び出すと、 *args に触れることができないようですが、 args.length を実行して、それが空であることを確認できます。
これにより、例外ではなくセグ フォールトが発生するのはなぜですか? これを次のような方法で解決することは受け入れられますか..
raise BadArgs if args.length == 0
さらにもう 1 つの質問が長すぎます。申し訳ありません。
ティア!ボブ