diff --git a/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs b/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs
index 96096a95d..93314ff0f 100644
--- a/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs
+++ b/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs
@@ -12,7 +12,7 @@ public class MockFileInfo : FileInfoBase
private readonly string originalPath;
private MockFileData cachedMockFileData;
private MockFile mockFile;
- private bool refreshOnNextRead;
+ private bool refreshOnNextRead = true;
///
public MockFileInfo(IMockFileDataAccessor mockFileSystem, string path) : base(mockFileSystem?.FileSystem)
@@ -21,7 +21,6 @@ public MockFileInfo(IMockFileDataAccessor mockFileSystem, string path) : base(mo
this.originalPath = path ?? throw new ArgumentNullException(nameof(path));
this.path = mockFileSystem.Path.GetFullPath(path);
this.mockFile = new MockFile(mockFileSystem);
- Refresh();
}
///
diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs
index 2c413ef57..e1d969bc8 100644
--- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs
+++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs
@@ -794,18 +794,21 @@ public void MockFileInfo_Replace_ShouldThrowIfDestinationFileDoesNotExist()
}
[Test]
- public void MockFileInfo_Exists_ShouldReturnCachedData()
+ public void MockFileInfo_Exists_LazyLoadsData()
{
// Arrange
var fileSystem = new MockFileSystem();
var path1 = XFS.Path(@"c:\temp\file1.txt");
var fileInfo = fileSystem.FileInfo.FromFileName(path1);
+ var cachedFileInfo = fileSystem.FileInfo.FromFileName(path1);
+ _ = cachedFileInfo.Exists; // this forces a lazyload of the data.
// Act
fileSystem.AddFile(path1, new MockFileData("1"));
// Assert
- Assert.IsFalse(fileInfo.Exists);
+ Assert.IsTrue(fileInfo.Exists);
+ Assert.IsFalse(cachedFileInfo.Exists, "Cached MockFileInfo should still return the cached value");
}
[Test]
@@ -815,6 +818,7 @@ public void MockFileInfo_Exists_ShouldUpdateCachedDataOnRefresh()
var fileSystem = new MockFileSystem();
var path1 = XFS.Path(@"c:\temp\file1.txt");
var fileInfo = fileSystem.FileInfo.FromFileName(path1);
+ fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load
// Act
fileSystem.AddFile(path1, new MockFileData("1"));
@@ -827,9 +831,11 @@ public void MockFileInfo_Exists_ShouldUpdateCachedDataOnRefresh()
[Test]
public void MockFileInfo_Create_ShouldUpdateCachedDataAndReturnTrueForExists()
{
+ // Arrange
IFileSystem fileSystem = new MockFileSystem();
var path = XFS.Path(@"c:\temp\file1.txt");
IFileInfo fileInfo = fileSystem.FileInfo.FromFileName(path);
+ fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load
// Act
fileInfo.Create().Dispose();
@@ -842,9 +848,11 @@ public void MockFileInfo_Create_ShouldUpdateCachedDataAndReturnTrueForExists()
[Test]
public void MockFileInfo_CreateText_ShouldUpdateCachedDataAndReturnTrueForExists()
{
+ // Arrange
IFileSystem fileSystem = new MockFileSystem();
var path = XFS.Path(@"c:\temp\file1.txt");
IFileInfo fileInfo = fileSystem.FileInfo.FromFileName(path);
+ fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load
// Act
fileInfo.CreateText().Dispose();
@@ -856,9 +864,11 @@ public void MockFileInfo_CreateText_ShouldUpdateCachedDataAndReturnTrueForExists
[Test]
public void MockFileInfo_Delete_ShouldUpdateCachedDataAndReturnFalseForExists()
{
+ // Arrange
var fileSystem = new MockFileSystem();
var path = XFS.Path(@"c:\temp\file1.txt");
IFileInfo fileInfo = fileSystem.FileInfo.FromFileName(path);
+ fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load
// Act
fileInfo.Delete();
diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs
index ac9216651..15f144075 100644
--- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs
+++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs
@@ -230,6 +230,21 @@ public void MockFileSystem_AddFile_ShouldMatchCapitalization_PartialMatch_Furthe
Assert.Contains(XFS.Path(@"C:\LOUD\SUBLOUD\new\SUBDirectory"), fileSystem.AllDirectories.ToList());
}
+ [Test]
+ public void MockFileSystem_FileInfoExists_ShouldBeTrueIfAFileWasAddedBeforeMockFileDataWasLazyLoaded()
+ {
+ // Arrange
+ var fileSystem = new MockFileSystem();
+ var path1 = XFS.Path(@"c:\temp\file1.txt");
+ var fileInfo = fileSystem.FileInfo.FromFileName(path1);
+
+ // Act
+ fileSystem.AddFile(path1, new MockFileData("1"));
+
+ // Assert
+ Assert.IsTrue(fileInfo.Exists);
+ }
+
[Test]
public void MockFileSystem_AddFileFromEmbeddedResource_ShouldAddTheFile()
{