2017-10-02 1 views
0

このような多くのテストを呼びたいと思います。クラス名を変更してインスタンスを作成する

 var test8001 = new Test8001(); 
     test8001.Execute(drv); 
     var test8002 = new Test8002(); 
     test8002.Execute(drv); 
     var test8007 = new Test8007(); 
     test8007.Execute(drv); 

すべてのテスト番号のintリストですべてのテスト機能を自動的にインスタンス化できますか?

 List<int> classNameNumbers = new List<int>() { 8001, 8002, 8007 }; 

すべてのインスタンスでExecute()が呼び出されるfor-loopが必要です。

編集: タイプの名前。 'Test8001'は私の整数リストから取得する必要があります。

+0

txtファイルにコードを生成し、生成したコードを実際のアプリケーションにコピー/ペーストする簡単なコンソールアプリケーションを構築します。あなたが比較的有能な開発者であれば、誰かが作成したツールを使うことを学ぶことに比べて、自分でテキスト生成ツールを書く方が簡単です(**本当に複雑なコードを生成しない限り、この例ではありません) – Flater

+0

私はリフレクションを提案することもできましたが、実行時にテストを生成することに本当に関心がないと思うので、コンパイル時にコードを生成する方法を探しています。私がそれを誤解した場合、私の以前のコメントは当てはまりません。 – Flater

+1

これらのテストのいずれかにパラメータを渡していますか? – Blorgbeard

答えて

2

これは、インスタンスタイプを作成するためにリフレクションを使用して、次の

namespace Stackoverflow46529447 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var drv = new Drv(); 

      var numbers = new[] {8001, 8002, 8003}; 
      var executables = numbers.Select(x => Activator.CreateInstance(Type.GetType($"Stackoverflow46529447.Test{x:0000}"))) 
       .OfType<IExecutable>() 
       .ToArray(); 

      foreach (var executable in executables) 
      { 
       executable.Execute(drv); 
      } 
     } 
    } 

    public class Test8001 : IExecutable 
    { 
     public void Execute(Drv drv) 
     { 
      Console.WriteLine("Hello from Test 8001"); 
     } 
    } 

    public class Test8002 : IExecutable 
    { 
     public void Execute(Drv drv) 
     { 
      Console.WriteLine("Hello from Test 8002"); 
     } 
    } 

    public class Test8003 : IExecutable 
    { 
     public void Execute(Drv drv) 
     { 
      Console.WriteLine("Hello from Test 8003"); 
     } 
    } 

    public interface IExecutable 
    { 
     void Execute(Drv drv); 
    } 

    public class Drv 
    { 

    } 
} 

を試してみてください。

関連する問題