多くのdllを含むフォルダがあります。そのうちの1つには、nunitテスト([Test]属性でマークされた関数)が含まれています。c#コードからnunitテストを実行したい。適切なdllを見つける方法はありますか?
ありがとうございました
多くのdllを含むフォルダがあります。そのうちの1つには、nunitテスト([Test]属性でマークされた関数)が含まれています。c#コードからnunitテストを実行したい。適切なdllを見つける方法はありますか?
ありがとうございました
Assembly.LoadFileメソッドを使用して、DLL を Assembly オブジェクトにロードできます。次に、Assembly.GetTypesメソッドを使用して、アセンブリで定義されているすべての型を取得します。次に、GetCustomAttributesメソッドを使用して、型が [TestFixture] 属性で装飾されているかどうかを確認できます。すぐに汚したい場合は、各属性で .GetType().ToString() を呼び出して、文字列に「TestFixtureAttribute」が含まれているかどうかを確認できます。
各タイプ内のメソッドを確認することもできます。メソッドType.GetMethodsを使用してそれらを取得し、それぞれで GetCustomAttributes を使用して、今回は "TestAttribute" を検索します。
誰かが実用的な解決策を必要とする場合に備えて。この方法でロードされたアセンブリをアンロードできないため、別の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);