diff --git a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs
index 78155cdd2..d1b23cb92 100644
--- a/src/System.IO.Abstractions.TestingHelpers/MockFile.cs
+++ b/src/System.IO.Abstractions.TestingHelpers/MockFile.cs
@@ -538,7 +538,7 @@ public override byte[] ReadAllBytes(string path)
throw CommonExceptions.FileNotFound(path);
}
mockFileDataAccessor.GetFile(path).CheckFileAccess(path, FileAccess.Read);
- return mockFileDataAccessor.GetFile(path).Contents;
+ return mockFileDataAccessor.GetFile(path).Contents.ToArray();
}
///
@@ -784,7 +784,7 @@ public override void WriteAllBytes(string path, byte[] bytes)
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
VerifyDirectoryExists(path);
- mockFileDataAccessor.AddFile(path, new MockFileData(bytes));
+ mockFileDataAccessor.AddFile(path, new MockFileData(bytes.ToArray()));
}
///
diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllBytesTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllBytesTests.cs
index 923321f2c..58462eeb4 100644
--- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllBytesTests.cs
+++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllBytesTests.cs
@@ -62,6 +62,28 @@ public void MockFile_ReadAllBytes_ShouldTolerateAltDirectorySeparatorInPath()
Assert.AreEqual(data, fileSystem.File.ReadAllBytes(altPath));
}
+
+ [Test]
+ public void MockFile_ReadAllBytes_ShouldReturnANewCopyOfTheFileContents()
+ {
+ var path = XFS.Path(@"c:\something\demo.bin");
+ var fileSystem = new MockFileSystem(new Dictionary
+ {
+ { path, new MockFileData(new byte[] { 1, 2, 3, 4 }) }
+ });
+
+ var firstRead = fileSystem.File.ReadAllBytes(path);
+
+ var secondRead = fileSystem.File.ReadAllBytes(path);
+
+ for (int i = 0; i < firstRead.Length; i++)
+ {
+ firstRead[i] += 1;
+ }
+
+ Assert.AreNotEqual(firstRead, secondRead);
+ }
+
#if FEATURE_ASYNC_FILE
[Test]
public async Task MockFile_ReadAllBytesAsync_ShouldReturnOriginalByteData()
diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllBytesTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllBytesTests.cs
index c48f28587..7a3f0a02a 100644
--- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllBytesTests.cs
+++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllBytesTests.cs
@@ -83,6 +83,27 @@ public void MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfBytesAreN
Assert.That(exception.ParamName, Is.EqualTo("bytes"));
}
+ [Test]
+ public void MockFile_WriteAllBytes_ShouldWriteASeparateCopyToTheFileSystem()
+ {
+ var fileSystem = new MockFileSystem();
+ string path = XFS.Path(@"c:\something\file.bin");
+ fileSystem.AddDirectory(XFS.Path(@"c:\something"));
+ var fileContent = new byte[] { 1, 2, 3, 4 };
+
+ fileSystem.File.WriteAllBytes(path, fileContent);
+
+ for(int i = 0; i < fileContent.Length; i++)
+ {
+ fileContent[i] += 1;
+ }
+
+ var readAgain = fileSystem.File.ReadAllBytes(path);
+
+ Assert.AreNotEqual(fileContent, readAgain);
+ }
+
+
#if FEATURE_ASYNC_FILE
[Test]
public void MockFile_WriteAllBytesAsync_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists()