我有一个包含许多 dll 的文件夹。其中之一包含 nunit 测试(标有 [Test] 属性的函数)。我想从 c# 代码运行 nunit 测试。有没有办法找到正确的dll?
谢谢你
我有一个包含许多 dll 的文件夹。其中之一包含 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);