2013-08-28 38 views
1

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

的单元测试集的构建输出目录是同一个目录中MyAssembly程序,我已经证实,他们都存在那里。当运行时,测试失败,因为此异常的:

结果消息:

MyNameSpace.UnitTests.MyAssemblyTest投掷

试验方法例外: System.IO.FileNotFoundException:未能加载文件或程序 “文件:/// [解决方案路径] \ SolutionName \ TestResults [用户 名称] _ [计算机名称] 2013-08-28 13_35_10 \ Out \ MyAssembly.dll'或其依赖项的一个 。该系统找不到指定的文件。

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

+0

“因为依赖关系导致几个GB”听起来不像是单元测试友好的......也许一些对代码组织和测试的反思可能是更好的方法。 –

+1

@AlexeiLevenkov TestAssembly - > AssemblyUnderTest - >大胖子依赖树。最重要的是,Visual Studio会复制所有的源代码,总计大约800 MB。为什么我应该被迫以这种方式隔离测试?即使是MSDN页面,也可能更希望禁用部署以节省复制文件的时间。 – makhdumi

回答

3

我终于明白了。尽管解决方案中没有提及这些剩余的VS 2010文件,但由于某些原因,VS 2012仍在使用它们。删除他们两个固定的问题:

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

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

+0

+1! (我必须重新启动Visual Studio以使更改生效。) –

+0

+1用于记录您的解决方案供我们阅读。 – clairestreb