2

我需要从程序集已经存在的程序集中运行单元测试。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:///[path to solution]\SolutionName\TestResults[user name]_[computer name] 2013-08- 28 13_35_10\Out\MyAssembly.dll' 或其依赖项之一。该系统找不到指定的文件。

我无法部署任何测试程序集,即使没有这种反射的东西,因为依赖关系会导致几个 GB。

4

1 回答 1

4

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

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

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

于 2013-08-28T20:58:39.667 回答