Moq

[TextFixture]
public class TestClass
{
	[SetUp]
	public void SetUp()
	{
		var classToMock = new Mock<IFileReader>();
		var service = new Service(classToMock.Object);
	}

	[Test]
	public void MethodName_SenarioName_ExpectedBehaviour()
	{
		// Arrange
		classToMock.Setup(c => c.Read("1")).Returns("only returns this when 1");
		classToMock.Setup(c => c.Read(It.IsAny<string>()))).Returns("only returns this when 2");

		// Act
		var result = service.DoWork();
		
		// Assert
		// ...
	}
}

Advanced mock

// Arrange
List<DataStorageModel> capturedFiles = null;
string capturedFolderPath = null;

_reportDataStorageMock
    .Setup(r => r.Persist(It.IsAny<List<DataStorageModel>>(), It.IsAny<string>()))
    .Callback<List<DataStorageModel>, string>((files, folderPath) =>
    {
        capturedFiles = files;
        capturedFolderPath = folderPath;
    })
    .Returns(true);
    
 // Act
 ...
 
 // Assert
 Assert.AreEqual(1, capturedFiles.Count);
 Assert.AreEqual("folderPath", capturedFolderPath);