无法在单元测试中引用visual studio项目中的文件

时间:2014-01-02 21:08:57

标签: c# visual-studio unit-testing reference

我在解决在项目中引用自定义文本文件的问题时遇到了一些麻烦。注意:该文件包含文本,但其自定义类型为“.rit”

我目前正在为新应用程序构建和运行一些测试用例,其中一个涉及读取驻留在我的项目的示例文件夹中的文件,名为“TestFiles”。起初,我使用文件的绝对路径在本地运行测试,它运行没有问题。但是,我正在使用TFS来检查我的代码,一旦测试在服务器中运行,它就会立即失败,因为它无法找到文件,这很明显,因为我使用的是本地驱动器中文件的绝对路径,所以我需要更改测试访问此文件的方式,使其在本地和服务器上都能正常工作。

我看了一些例子,因为我正在寻求帮助,但似乎没有工作......我试过了:

DeploymentItem:

      [DeploymentItem(@"TestProject\TestFiles\test file.rit", "TestData")]
    [TestMethod]
    public void LoadFileTest()
    {
        //Assert.IsTrue(File.Exists("test file.rit"));

        var obj = new obj();
        var tstFile = @"TestData\\test file.rit";
        var file = new StreamReader(tstFile);

        obj.OpenRitFileInTextFormat(file);
    }

文件的层次结构是:Solution \ TestProject \ TestFiles \ test file.rit,我确保将Copy to Output设置为“始终复制”

将其添加为资源:

    //[DeploymentItem(@"TestProject\\TestFiles\\test file.rit", "TestData")]
    [TestMethod]
    public void LoadFileTest()
    {
        //Assert.IsTrue(File.Exists("test file.rit"));

        var obj = new obj();
        var tstFile = Properties.Resources.test_file;
        //this one throws an error however because it says the type of tstFile is now
        //a byte[] instead of a stream reader
        *var file = new StreamReader(tstFile);*

        obj.OpenRitFileInTextFormat(file);
    }

我在这个方面不是很有经验,所以我可能做错了什么......如果有人可以请我启发或给我一些指导,我可以寻求帮助,我会非常感激!

谢谢,

编辑:我发现我的TestData文件夹我指定在DeploymentItem路径中复制没有创建/复制到测试运行的Out文件夹。我开始认为这更像是设置文件问题,这是我的设置文件的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
     <!-- Configurations that affect the Test Framework -->
     <RunConfiguration>
     <!-- Path relative to solution directory -->
     <ResultsDirectory>.\TestResults</ResultsDirectory>

      <!-- [x86] | x64  
       - You can also change it from menu Test, Test Settings, Default Processor Architecture -->
      <TargetPlatform>x86</TargetPlatform>

      <!-- Framework35 | [Framework40] | Framework45 -->
      <TargetFrameworkVersion>Framework40</TargetFrameworkVersion>
       </RunConfiguration>

      <!-- Configurations for data collectors -->
      <DataCollectionRunSettings>
      <DataCollectors>
      <DataCollector friendlyName="Code Coverage"         uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
       <Configuration>
        <CodeCoverage>
           <ModulePaths>
             <Exclude>
               <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
            </Exclude>
          </ModulePaths>
         </CodeCoverage>
       </Configuration>
      </DataCollector>

      </DataCollectors>
      </DataCollectionRunSettings>

       <!-- Adapter Specific sections -->

       <!-- MSTest adapter -->
       <MSTest>
       <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
       <CaptureTraceOutput>false</CaptureTraceOutput>
       <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
       <DeploymentEnabled>True</DeploymentEnabled>
     </MSTest>


    </RunSettings>

1 个答案:

答案 0 :(得分:2)

使用@修饰符时,不应该逃避反斜杠。因此,请使用[DeploymentItem("TestProject\\TestFiles\\test file.rit", "TestData")][DeploymentItem(@"TestProject\TestFiles\test file.rit", "TestData")]。第二个版本更可取。

根据我的经验,如果文件在根级别添加到项目中,那么在测试用例中只能由[DeploymentItem("file.xyz")]引用它。所以在你的情况下[DeploymentItem(@"TestFiles\test file.rit", "TestData")]应该没问题。

您还需要记住“解决方案项目”中的“启用部署” - &gt; Local.testsettings:

enter image description here