MSTEST:如何创建文件?

MSTEST: How do I create files?

我有一个应用程序正在监视文件目录,然后在看到特定类型的文件时做一些工作(向 Web 服务发送消息)。 在我创建应用程序之前,我正在创建一些测试。要设置测试,我想创建 3 个文件。对于拆解,我想删除那些文件。

在普通的控制台应用程序中,此代码工作正常,但在 MSTEST 中,出现以下错误

消息:初始化方法 XXX 抛出异常。 System.IO.DirectoryNotFoundException: System.IO.DirectoryNotFoundException: 找不到部分路径 'C:\repos\MyProjects.Project1\TestResults\some_testrun_unique_folder\Out\Tests50\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);
        }
    }
}

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

CreateFiles 方法中,您可以这样做:

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

注意:您无需费心检查文件夹是否存在,因为 CreateDirectory 会为您完成。

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

既然如此,为什么会出现异常?因为目录Tests在当前工作目录下不存在,所以你需要做的就是创建那个目录,你可以用CreateDirectory来做。