2017-07-18 68 views
0

我有一个应用程序正在观看文件目录,然后在看到某种类型的文件(向Web服务发送消息)时做了一些工作。 在我创建应用程序之前,我正在创建一些测试。要设置测试,我想创建3个文件。对于拆解,我想删除这些文件。MSTEST:如何创建文件?

在一个正常的控制台应用程序,此代码工作正常,但在MSTEST,我得到以下错误

消息:初始化方法XXX抛出异常。 System.IO.DirectoryNotFoundException: System.IO.DirectoryNotFoundException:找不到路径的一部分 'C:\回购\ MyProjects.Project1 \ TestResults \ some_testrun_unique_folder \输出\测试\ 0950 \ FILE1.TXT' ..

我怎样MSTEST的目录工作文件的创建?

public class FileWatcherTests 
{ 
    string _testPath = @"Tests\" + DateTime.Now.ToString("HHmm"); 
    string[] _testFiles = new[] { "file1.txt", "file2.txt", "file3.txt" }; 
    [TestInitialize] 
    public void Init() 
    { 
     CreateFiles(_testPath, _testFiles); 
    } 

    [TestCleanup()] 
    public void Cleanup() 
    { 
     RemoveFiles(_testPath, _testFiles); 
    } 


    void CreateFiles(string path, string[] fileNames) 
    { 
     foreach (var fileName in fileNames) 
     { 
      var fullName = Path.Combine(path, fileName); 
      File.WriteAllText(
       path: fullName, 
       contents: "Some Random Text"); 
     } 
    } 
    void RemoveFiles(string path, string[] fileNames) 
    { 
     foreach (var fileName in fileNames) 
     { 
      var fullName = Path.Combine(path, fileName); 
      File.Delete(fullName); 
     } 
    } 
} 

回答

1

您需要在尝试写入文件之前创建包含文件夹。

里面的CreateFiles方法,你可以这样做:

var parentFolder = Path.GetDirectoryName(fileName); 
System.IO.Directory.CreateDirectory(parentFolder); 

注意:您不需要费心检查,如果该文件夹存在,因为CreateDirectory会为你做的。

+0

是的,就是这样。谢谢! – John

0

其实在创建MsTest下的文件与控制台应用程序相比没有太大的不同。在控制台应用程序中,工作目录通常是./bin/debug,在MsTest之下,它是您在异常中获得的长文件路径。

因为这样,为什么你会得到一个异常?因为目录Tests在当前工作目录下不存在,所以您只需创建可使用CreateDirectory执行的目录。

+0

我错过了从我的控制台应用程序到测试项目的代码,恰好是John报告的答案。 – John