For services that implement the actual logic (e.g., FileSystemService), use integration-style tests. To ensure isolation and prevent side effects on the host machine, create a unique temporary directory in [TestInitialize] and delete it recursively in [TestCleanup].
[TestClass]
public class FileSystemServiceTests
{
private string _testDirectory = null!;
private FileSystemService _service = null!;
[TestInitialize]
public void Setup()
{
_testDirectory = Path.Combine(Path.GetTempPath(), $"test_{Guid.NewGuid()}");
Directory.CreateDirectory(_testDirectory);
_service = new FileSystemService();
}
[TestCleanup]
public void Cleanup()
{
if (Directory.Exists(_testDirectory))
{
Directory.Delete(_testDirectory, recursive: true);
}
}
[TestMethod]
public async Task WriteFileAsync_CreatesFileWithContent()
{
// Arrange
var filePath = Path.Combine(_testDirectory, "test.txt");
var content = "Hello, World!";
// Act
await _service.WriteFileAsync(filePath, content, CancellationToken.None);
// Assert
File.Exists(filePath).Should().BeTrue();
(await File.ReadAllTextAsync(filePath)).Should().Be(content);
}
}