NUnitとC#を使用して、古い学校のCOM/ActiveXコントロールをユニットテストしています。 私がテストしているコントロールは主にjavascriptから使用されているので、参照やコンパイル時の型情報はすべて動的に処理しています。もちろん、動的にすべてを行います。私はいくつかのイベントハンドラを接続し、イベントが適切に起動されていることを確認したいが、私はを見つけることができないイベントを見つける!私は、動的に、このように(いくつかの詳細は省略;-)、System.Activator.CreateInstanceを用いたコントロールのインスタンスを構築:NUnit + Reflectionを使用すると、ActiveXコントロールでイベントが見つかりません
EZTwainX.InvokeMember("Clear", BindingFlags.InvokeMethod, null, eztwain, null);
Assert.AreEqual(0, (int)EZTwainX.InvokeMember("ImageCount", BindingFlags.GetProperty, null, eztwain, null), "ImageCount");
:プロパティとメソッドの
Type T = Type.GetTypeFromCLSID(guid);
eztwain = System.Activator.CreateInstance(T);
EZTwainX = eztwain.GetType();
試験はそうように、正常に動作します私はちょうど私がREFLを使って何かをすることができること(エヘン)を想定し
EZTwainX.GetEvent("AcquireDone"); // returns null
EZTwainX.GetEvents(); // returns empty array
EZTwainX.GetEvents(BindingFlags.Public | // returns empty array
BindingFlags.NonPublic |
BindingFlags.Static | BindingFlags.Instance);
PropertyInfo propertyInfo = EZTwainX.GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); // returns null
MemberInfo[] mimfo = EZTwainX.GetMember("AcquireDone", MemberTypes.Event, BindingFlags.Public | BindingFlags.NonPublic); // returns empty array
:以下のすべてのnullまたは空の配列を返すかのような適切な「名前が見つかりません」例外をスロー、失敗相当ectionのAPI、:
eztwain.AcquireDone += <event handler>;
が、私はそれと同等のものが何であるかを把握することはできません。 EDIT:JavaScriptでこの作品(およびイベントをキャッチする)ので、私はそのコントロールにそのイベントを信じる:
eztwain.attachEvent("AcquireDone", function() { me.onAcquireDone(); });