Exemplo n.º 1
0
        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"));
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 3
0
        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"));
        }
Exemplo n.º 4
0
        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"));
        }
Exemplo n.º 5
0
        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"));
        }
Exemplo n.º 6
0
        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"));
        }
Exemplo n.º 7
0
        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"));
        }
Exemplo n.º 8
0
        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"));
        }
Exemplo n.º 9
0
        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"));
        }
Exemplo n.º 10
0
        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"));
        }
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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"));
        }