0

インターネット ブラウザを介してハードウェアの単体テストを行うアプリケーションを作成しました。

チェックボックスにチェックを入れたり、ドロップダウンボックスから選択したりするなど、個々のWebブラウザアクションのラッパーであるアセンブリにコマンドクラスがあります。

BasicConfigurationCommands
EventConfigurationCommands
StabilizationCommands

コマンドクラスを使用してスクリプト化されたテストを実行する一連のテストクラス:

ConfigurationTests
StabilizationTests

これらは、GUI を介して呼び出され、QA チームによって事前にスクリプト化されたテストが実行されますただし、ファームウェアはリリース間で非常に迅速に変更されるため、開発者がテストまたはコマンドのいずれかを呼び出すことができるXML ファイルを作成できれば素晴らしいことです。

<?xml version="1.0" encoding="UTF-8" ?> 
<testsuite>
    <StabilizationTests>
        <StressTest repetition="10" />
    </StabilizationTests>
    <BasicConfigurationCommands>
        <SelectConfig number="2" />
        <ChangeConfigProperties name="Weeeeee" timeOut="15000" delay="1000"/>
        <ApplyConfig />
    </BasicConfigurationCommands> 
</testsuite>

私はSystem.Reflectionクラスを見ていてGetMethod、 and thenを使用した例を見てきましたInvoke。これには、コンパイル時にクラス オブジェクトを作成する必要があり、これらすべてを実行時に行いたいと考えています

アセンブリ全体でクラス名をスキャンしてから、クラス内のメソッドをスキャンする必要があります。

これは大きな解決策のように思われるので、私 (およびこの投稿の将来の読者) が答えを示す情報は素晴らしいでしょう!

読んでくれてありがとう、

マット

4

1 に答える 1

2

アセンブリ内のすべてのクラスを検索するには:

public Type FindClass(string name)
{
   Assembly ass = null;
   ass = Assembly.Load("System.My.Assembly"); // Load from the GAC
   ass = Assembly.LoadFile(@"c:\System.My.Assembly.dll"); // Load from file
   ass = Assembly.LoadFrom("System.My.Assembly"); // Load from GAC or File

   foreach(Type t in ass.GetTypes())
   {
      if (t.Name == name)
         return t;
   }

   return null;
}

実際には、クラスを属性でタグ付けする必要があります。これにより、クラスがより見つけやすくなります。

上記のクラスのインスタンスをインスタンス化するには:

public T Instantiate<T>(Type typ, object[] arguments)
{
    return (T)Activator.CreateInstance(typ, arguments, null);
}

これらを適切な try/catch ブロックでラップする必要があることを忘れないでください。

次に、クラスのメソッドを見つける

Type t = FindClass("MyType");
MethodInfo meth = t.GetMethod("TestSomething", typeof(string), typeof(int)); // finds public ??? TestSomething(string, int)

VStudio でオブジェクト ブラウザーをいじって、Reflection クラスを学習するだけで、できることはたくさんあります。

于 2010-05-13T16:02:10.027 に答える