public interface ILoggerDependency { string GetCurrentDirectory(); string GetDirectoryByLoggerName(string loggerName); string DefaultLogger { get; } }
// Mock.Of (-), -. // , GetCurrentDirectory() // "D:\\Temp" ILoggerDependency loggerDependency = Mock.Of<ILoggerDependency>(d => d.GetCurrentDirectory() == "D:\\Temp"); var currentDirectory = loggerDependency.GetCurrentDirectory(); Assert.That(currentDirectory, Is.EqualTo("D:\\Temp"));
// GetDirectoryByLoggerName "C:\\Foo". ILoggerDependency loggerDependency = Mock.Of<ILoggerDependency>( ld => ld.GetDirectoryByLoggerName(It.IsAny<string>()) == "C:\\Foo"); string directory = loggerDependency.GetDirectoryByLoggerName("anything"); Assert.That(directory, Is.EqualTo("C:\\Foo"));
// , // GetDirrectoryByLoggerName . // : // public string GetDirectoryByLoggername(string s) { return "C:\\" + s; } Mock<ILoggerDependency> stub = new Mock<ILoggerDependency>(); stub.Setup(ld => ld.GetDirectoryByLoggerName(It.IsAny<string>())) .Returns<string>(name => "C:\\" + name); string loggerName = "SomeLogger"; ILoggerDependency logger = stub.Object; string directory = logger.GetDirectoryByLoggerName(loggerName); Assert.That(directory, Is.EqualTo("C:\\" + loggerName));
// DefaultLogger ILoggerDependency logger = Mock.Of<ILoggerDependency>( d => d.DefaultLogger == "DefaultLogger"); string defaultLogger = logger.DefaultLogger; Assert.That(defaultLogger, Is.EqualTo("DefaultLogger"));
// «» ILoggerDependency logger = Mock.Of<ILoggerDependency>( d => d.GetCurrentDirectory() == "D:\\Temp" && d.DefaultLogger == "DefaultLogger" && d.GetDirectoryByLoggerName(It.IsAny<string>()) == "C:\\Temp"); Assert.That(logger.GetCurrentDirectory(), Is.EqualTo("D:\\Temp")); Assert.That(logger.DefaultLogger, Is.EqualTo("DefaultLogger")); Assert.That(logger.GetDirectoryByLoggerName("CustomLogger"), Is.EqualTo("C:\\Temp"));
var stub = new Mock<ILoggerDependency>(); stub.Setup(ld => ld.GetCurrentDirectory()).Returns("D:\\Temp"); stub.Setup(ld => ld.GetDirectoryByLoggerName(It.IsAny<string>())).Returns("C:\\Temp"); stub.SetupGet(ld => ld.DefaultLogger).Returns("DefaultLogger"); ILoggerDependency logger = stub.Object; Assert.That(logger.GetCurrentDirectory(), Is.EqualTo("D:\\Temp")); Assert.That(logger.DefaultLogger, Is.EqualTo("DefaultLogger")); Assert.That(logger.GetDirectoryByLoggerName("CustomLogger"), Is.EqualTo("C:\\Temp"));
public interface ILogWriter { string GetLogger(); void SetLogger(string logger); void Write(string message); } public class Logger { private readonly ILogWriter _logWriter; public Logger(ILogWriter logWriter) { _logWriter = logWriter; } public void WriteLine(string message) { _logWriter.Write(message); } }
var mock = new Mock<ILogWriter>(); var logger = new Logger(mock.Object); logger.WriteLine("Hello, logger!"); // , Write mock.Verify(lw => lw.Write(It.IsAny<string>()));
mock.Verify(lw => lw.Write("Hello, logger!"));
mock.Verify(lw => lw.Write(It.IsAny<string>()), Times.Once());
var mock = new Mock<ILogWriter>(); mock.Setup(lw => lw.Write(It.IsAny<string>())); var logger = new Logger(mock.Object); logger.WriteLine("Hello, logger!"); // Verify . // , // mock.Setup mock.Verify();
var mock = new Mock<ILogWriter>(); mock.Setup(lw => lw.Write(It.IsAny<string>())); mock.Setup(lw => lw.SetLogger(It.IsAny<string>())); var logger = new Logger(mock.Object); logger.WriteLine("Hello, logger!"); mock.Verify();
var mock = new Mock<ILogWriter>(MockBehavior.Strict); // , // mock.Verify() mock.Setup(lw => lw.Write(It.IsAny<string>())); mock.Setup(lw => lw.SetLogger(It.IsAny<string>())); var logger = new Logger(mock.Object); logger.WriteLine("Hello, logger!"); mock.Verify();
var repository = new MockRepository(MockBehavior.Default); ILoggerDependency logger = repository.Of<ILoggerDependency>() .Where(ld => ld.DefaultLogger == "DefaultLogger") .Where(ld => ld.GetCurrentDirectory() == "D:\\Temp") .Where(ld => ld.GetDirectoryByLoggerName(It.IsAny<string>()) == "C:\\Temp") .First(); Assert.That(logger.GetCurrentDirectory(), Is.EqualTo("D:\\Temp")); Assert.That(logger.DefaultLogger, Is.EqualTo("DefaultLogger")); Assert.That(logger.GetDirectoryByLoggerName("CustomLogger"), Is.EqualTo("C:\\Temp"));
var repo = new MockRepository(MockBehavior.Default); var logWriterMock = repo.Create<ILogWriter>(); logWriterMock.Setup(lw => lw.Write(It.IsAny<string>())); var logMailerMock = repo.Create<ILogMailer>(); logMailerMock.Setup(lm => lm.Send(It.IsAny<MailMessage>())); var smartLogger = new SmartLogger(logWriterMock.Object, logMailerMock.Object); smartLogger.WriteLine("Hello, Logger"); repo.Verify();
ILoggerDependency logger = Mock.Of<ILoggerDependency>( ld => ld.GetCurrentDirectory() == "D:\\Temp" && ld.DefaultLogger == "DefaultLogger"); // GetDirectoryByLoggerName // , Mock.Get(logger) .Setup(ld => ld.GetDirectoryByLoggerName(It.IsAny<string>())) .Returns<string>(loggerName => "C:\\" + loggerName); Assert.That(logger.GetCurrentDirectory(), Is.EqualTo("D:\\Temp")); Assert.That(logger.DefaultLogger, Is.EqualTo("DefaultLogger")); Assert.That(logger.GetDirectoryByLoggerName("Foo"), Is.EqualTo("C:\\Foo")); Assert.That(logger.GetDirectoryByLoggerName("Boo"), Is.EqualTo("C:\\Boo"));
Source: https://habr.com/ru/post/150859/
All Articles