3

多くのdllを含むフォルダがあります。そのうちの1つには、nunitテスト([Test]属性でマークされた関数)が含まれています。c#コードからnunitテストを実行したい。適切なdllを見つける方法はありますか?

ありがとうございました

4

2 に答える 2

5

Assembly.LoadFileメソッドを使用して、DLL を Assembly オブジェクトにロードできます。次に、Assembly.GetTypesメソッドを使用して、アセンブリで定義されているすべての型を取得します。次に、GetCustomAttributesメソッドを使用して、型が [TestFixture] 属性で装飾されているかどうかを確認できます。すぐに汚したい場合は、各属性で .GetType().ToString() を呼び出して、文字列に「TestFixtureAttribute」が含まれているかどうかを確認できます。

各タイプ内のメソッドを確認することもできます。メソッドType.GetMethodsを使用してそれらを取得し、それぞれで GetCustomAttributes を使用して、今回は "TestAttribute" を検索します。

于 2012-12-01T22:49:42.127 に答える
0

誰かが実用的な解決策を必要とする場合に備えて。この方法でロードされたアセンブリをアンロードできないため、別のAppDomainにロードすることをお勧めします。

  public class ProxyDomain : MarshalByRefObject
  {
      public bool IsTestAssembly(string assemblyPath)
      {
         Assembly testDLL = Assembly.LoadFile(assemblyPath);
         foreach (Type type in testDLL.GetTypes())
         {
            if (type.GetCustomAttributes(typeof(NUnit.Framework.TestFixtureAttribute), true).Length > 0)
            {
               return true;
            }
         }
         return false;
      }
   }

     AppDomainSetup ads = new AppDomainSetup();
     ads.PrivateBinPath = Path.GetDirectoryName("C:\\some.dll");
     AppDomain ad2 = AppDomain.CreateDomain("AD2", null, ads);
     ProxyDomain proxy = (ProxyDomain)ad2.CreateInstanceAndUnwrap(typeof(ProxyDomain).Assembly.FullName, typeof(ProxyDomain).FullName);
     bool isTdll = proxy.IsTestAssembly("C:\\some.dll");
     AppDomain.Unload(ad2);
于 2012-12-13T23:45:40.910 に答える