单元测试动态加载程序集
在VS2008的单元测试下取程序集所在目录有点别扭。
System.Reflection.Assembly.GetExecutingAssembly().Location得到的一个临时的目录,没有引用到测试项目的dll不会拷贝到该临时目录。换言之如果你想动态加载某些类,请先引用到测试项目,无言
AppDomain.CurrentDomain.BaseDirectory得到自然是IDE所在的目录。
只好这样处理
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private T createInstance<T>(string pTypeName)
{
string[] arr = pTypeName.Split(',');
//取路径
System.Reflection.Assembly cur = System.Reflection.Assembly.GetExecutingAssembly();
string folder = System.IO.Path.GetDirectoryName(cur.Location);
//取程序集
string fullName = string.Format("{0}\\{1}.dll", folder.TrimEnd('\\'),arr[1]);
System.Reflection.Assembly my = System.Reflection.Assembly.LoadFile(fullName);
object obj = my.CreateInstance(arr[0]);
if (obj == null)
return default(T);
else
return (T)obj;
}
{
string[] arr = pTypeName.Split(',');
//取路径
System.Reflection.Assembly cur = System.Reflection.Assembly.GetExecutingAssembly();
string folder = System.IO.Path.GetDirectoryName(cur.Location);
//取程序集
string fullName = string.Format("{0}\\{1}.dll", folder.TrimEnd('\\'),arr[1]);
System.Reflection.Assembly my = System.Reflection.Assembly.LoadFile(fullName);
object obj = my.CreateInstance(arr[0]);
if (obj == null)
return default(T);
else
return (T)obj;
}
也可以在测试代码前放置这样的代码
AppDomain.CurrentDomain.SetData("APPBASE", @"D:\TestProject2\bin\Debug");
其中的“D:\TestProject2\bin\Debug ”是我测试程序的输出目录。