我需要从程序集已经存在的程序集中运行单元测试。 Visual Studio(2012)正在将该程序集复制到某个生成的部署位置,并从那里进行测试。我该如何防止这种情况?
根据How to: Deploy Files for Tests上的此页面,当使用DeploymentItem属性时,单元测试仅部署到某个目录。
如果使用Visual Studio运行测试,则会在解决方案文件夹中的TestResults下创建部署文件夹。 如果测试运行中的任何测试方法或类具有DeploymentItem属性,或者使用.testsettings文件,则使用单独的部署文件夹。
我没有任何DeploymentItem属性,但是以下测试失败,因为正在从某个生成的目录运行单元测试,而不是构建输出目录。我还尝试创建.runsettings文件并确保未选中“启用部署”,但Visual Studio似乎忽略了这一点。
[TestClass]
public class UnitTests
{
private void RunAssemblySelfTests(string assemblyName)
{
Assembly assembly = Assembly.LoadFrom(assemblyName + ".dll");
//...load and run tests that use in-house testing framework
}
[TestMethod]
public void MyAssemblyTest()
{
RunAssemblySelfTests("MyAssembly");
}
}
UnitTests程序集的构建输出目录与MyAssembly是同一目录,我已经确认它们都存在于那里。运行时,由于此异常,测试失败:
结果讯息:
测试方法MyNameSpace.UnitTests.MyAssemblyTest抛出异常: System.IO.FileNotFoundException:无法加载文件或程序集 'file:/// [解决方案的路径] \ SolutionName \ TestResults [user 名称] _ [计算机名] 2013-08-28 13_35_10 \ Out \ MyAssembly.dll'或者一个 它的依赖关系。系统找不到指定的文件。
即使没有进行这种反射,我也无法部署任何测试程序集,因为依赖项会产生几GB。
答案 0 :(得分:3)
我终于明白了。虽然解决方案中没有引用这些剩余的VS 2010文件,但VS 2012仍然出于某种原因使用它们。删除它们都解决了问题:
Visual Studio仍会创建一个TestResults文件夹,但它不再部署文件和整个解决方案的源代码。