public void GetCurrentDirrectory() { // 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")); }
public void Test_DefaultLogger_Simple_Stub() { // Arrange ILoggerDependency logger = Mock.Of <ILoggerDependency>( d => d.DefaultLogger == "DefaultLogger"); string defaultLogger = logger.DefaultLogger; Console.WriteLine("Default logger is '{0}'", defaultLogger); // Assert Assert.That(defaultLogger, Is.EqualTo("DefaultLogger")); }
public void TestSeveralWithMockRepository() { 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")); }
public void Test_GetCurrentDirrectory_Simple_Stub() { // Arrange // Mock.Of returns dependency itself (auto generated proxy) but not the mock object. // This code means that GetCurrentDirectory() will return "D:\\Temp" ILoggerDependency loggerDependency = Mock.Of <ILoggerDependency>(d => d.GetCurrentDirectory() == "D:\\Temp"); var currentDirectory = loggerDependency.GetCurrentDirectory(); Console.WriteLine("Current directory is {0}", currentDirectory); // Assert Assert.That(currentDirectory, Is.EqualTo("D:\\Temp")); }
public void Test_GetDirectoryByLoggerName_Stub_Always_Returns_The_Same_Value(string loggerName) { // Arrange // For any parameter in the GetDirectoryByLoggerName Stub should return "C:\\Foo". ILoggerDependency loggerDependency = Mock.Of <ILoggerDependency>( ld => ld.GetDirectoryByLoggerName(It.IsAny <string>()) == "C:\\Foo"); // Act string directory = loggerDependency.GetDirectoryByLoggerName(loggerName); Console.WriteLine("Directory for the logger '{0}' is '{1}'", loggerName, directory); // Assert Assert.That(directory, Is.EqualTo("C:\\Foo")); }
public void Test_Initialize_Multiple_Stubs_Using_Setup_Calls() { // Arrange Mock <ILoggerDependency> 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 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 void Test_Initialize_Multiple_Stubs_Using_v4_Syntax() { // Arrange // Moq v.4 introduces new feature called "moq functional specification". // Using this new syntax we're able to setup several stubs in one expression ILoggerDependency logger = Mock.Of <ILoggerDependency>( d => d.GetCurrentDirectory() == "D:\\Temp" && d.DefaultLogger == "DefaultLogger" && d.GetDirectoryByLoggerName(It.IsAny <string>()) == "C:\\Temp"); // Assert 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 void Test_Initialize_Multiple_Stubs_Using_Repository_OneOf_Method() { // MockRepository supports two ways for building subs. // Instead of calling "Of" method we can call OneOf and // use the same syntax as for creating stubs via Mock.Of // Arrange var repository = new MockRepository(MockBehavior.Default); ILoggerDependency logger = repository.OneOf <ILoggerDependency>(ld => ld.DefaultLogger == "DefaultLogger" && ld.GetCurrentDirectory() == "D:\\Temp" && ld.GetDirectoryByLoggerName(It.IsAny <string>()) == "C:\\Temp"); // Assert 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 void Test_Initialize_Multiple_Stubs_Using_Repository_Of_Method() { // There is another way to initialize multiple stubs inside one // expression using LINQ-style syntax (using moq functional specification) // using MockRepository class // Arrange 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 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 void Test_Getting_Mock_By_The_Mocked_Interface() { // In some cases we need to obtain mock-object by mocked interface. // For example, we can use "moq functional specification" syntax for several // members and use old imperative syntax for some other members ILoggerDependency logger = Mock.Of <ILoggerDependency>( ld => ld.GetCurrentDirectory() == "D:\\Temp" && ld.DefaultLogger == "DefaultLogger"); // Setting up more complex scenario for GetDirectoryByLoggerName Mock.Get(logger) .Setup(ld => ld.GetDirectoryByLoggerName(It.IsAny <string>())) .Returns <string>(loggerName => "C:\\" + loggerName); // Assert 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")); }
public void Test_GetDirectoryByLoggerName_Stub_Returns_Different_Value_Based_On_The_Arguments(string loggerName) { // Arrange // Unfortunately I don't know how to create stub that will return different value based on the arguments // using v.4 functional specification style // Setting up our stub to return different values based on the argument. // This code is similar to following implementation: // 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); ILoggerDependency logger = stub.Object; string directory = logger.GetDirectoryByLoggerName(loggerName); Console.WriteLine("Directory for the logger '{0}' is '{1}'", loggerName, directory); // Assert Assert.That(directory, Is.EqualTo("C:\\" + loggerName)); }
public void GetDirectoryByLoggerName() { //// Для любого аргумента метода 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")); }