Skip to content

MockFileSystem extensions #32

@rcdailey

Description

@rcdailey

Would you find the below extension methods useful? If so, I am happy to open a pull request. I'm hesitant to do so right away because I'm not sure if these should be extension methods in this library or if I should contribute them as actual class members upstream (upstream being the actual IO.Abstractions package).

I found these extension methods to be absolutely invaluable in my own code base in conjunction with the Extensions package. It eliminates a lot of boilerplate in my unit tests, namely these:

var fs = new MockFileSystem();
var myDir = fs.CurrentDirectory().SubDirectory("dir");
var myFile = fs.CurrentDirectory().File("file.txt");

// Creating empty files
fs.AddFile(myFile.FullName, new MockFileData(""));
// Becomes
fs.AddEmptyFile(foo);

// Specifying `FullName` all over the place...
fs.AddDirectory(myDir.FullName);
// Becomes
fs.AddDirectory(myDir);

If you could provide some guidance and feedback, I'm happy to move this to a PR. Thanks for your time!

public static class MockFileSystemExtensions
{
    public static void AddEmptyFile(this MockFileSystem fs, string path)
    {
        fs.AddFile(path, new MockFileData(""));
    }

    public static void AddEmptyFile(this MockFileSystem fs, IFileInfo path)
    {
        fs.AddEmptyFile(path.FullName);
    }

    public static void AddDirectory(this MockFileSystem fs, IDirectoryInfo path)
    {
        fs.AddDirectory(path.FullName);
    }

    public static void AddFile(this MockFileSystem fs, IFileInfo path, MockFileData data)
    {
        fs.AddFile(path.FullName, data);
    }

    public static MockFileData GetFile(this MockFileSystem fs, IFileInfo path)
    {
        return fs.GetFile(path.FullName);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions