从构建输出运行单元测试

时间:2013-08-28 19:54:57

标签: c# .net visual-studio unit-testing

我需要从程序集已经存在的程序集中运行单元测试。 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。

1 个答案:

答案 0 :(得分:3)

我终于明白了。虽然解决方案中没有引用这些剩余的VS 2010文件,但VS 2012仍然出于某种原因使用它们。删除它们都解决了问题:

  • [解决方案名称] .testrunco​​nfig
  • [解决方案名称] .vsmdi

Visual Studio仍会创建一个TestResults文件夹,但它不再部署文件和整个解决方案的源代码。