我的解决方案中有2个项目,一个是实际代码( NUnitSample1 ),另一个是带有单元测试的测试项目( NUnitSample1.Test )。 NUnitSample1.Test 包含第一个项目 NUnitSample1 的引用。两个项目的“构建输出”路径不同,并且已明确指定。 NUnitSample1 项目参考的CopyLocal
属性需要设置为false
。
现在,当我构建并尝试使用ReSharper运行单元测试时,它失败并显示以下消息:
System.IO.FileNotFoundException:无法加载文件或程序集“NUnitSample1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。系统找不到指定的文件。
我想这是因为二进制文件位于不同的文件夹中。有没有办法在保持这种结构的同时使用ReSharper运行测试?此外,已经有成千上万的测试编写,因此我需要一个涉及最少代码更改的解决方案。动态加载程序集(如AlexeiLevenkov所建议的)有效,但是它会涉及单独设置每个方法,这是不可行的。
+NUnitSample1Solution
+NUnitSample1 //This folder contains the actual class library project
+NUnitSample1.Test //This folder contains the test project
+Binaries //This folder contains the binaries of both projects
+bin //This folder contains the project dll
+tests
+bin //This folder contains the test project dll
我发现这个NUnit link可以指定多个程序集,但是,当我尝试使用ReSharper运行时,这甚至不起作用。我也不确定我是否正确操作,需要在哪里添加配置文件?在实际项目或测试项目中?什么是构建动作应该是什么?
任何指针都将不胜感激。 TIA。
答案 0 :(得分:0)
我可以使用TestFixtureSetup
中的here的答案加载缺少的程序集(也可以使用Setup
方法)。
[TestFixtureSetUp]
public void Setup()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(LoadFromSameFolder);
}
static Assembly LoadFromSameFolder(object sender, ResolveEventArgs args)
{
string folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string assemblyPath = Path.Combine(folderPath, new AssemblyName(args.Name).Name + ".dll");
if (File.Exists(assemblyPath) == false) return null;
Assembly assembly = Assembly.LoadFrom(assemblyPath);
return assembly;
}
可以修改LoadFromSameFolder
方法中的上述代码以准确定位程序集。