从生成输出运行单元测试

本文关键字:运行 单元测试 输出 | 更新日期: 2023-09-27 18:29:19

我需要从已经存在程序集的程序集中运行单元测试。Visual Studio(2012)正在将该程序集复制到某个生成的部署位置,并从那里进行测试。我该如何防止这种情况发生?

根据"如何:为测试部署文件"页面,只有在使用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。

从生成输出运行单元测试

我终于想通了。尽管解决方案中没有引用这些剩余的VS 2010文件,但由于某种原因,VS 2012仍在使用它们。删除它们都解决了问题:

  • [SolutionName].testrunconfig
  • [解决方案名称].vsmdi

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