コード例 #1
0
        public void Execute_ReadsInstructions_PassesToRobotOperator_WhenValid(params string[] inputs)
        {
            //Arrange
            IEnumerable <string>  inputSequence = inputs.AsEnumerable();
            Mock <IRobotOperator> robotOperator = new Mock <IRobotOperator>();
            var reader = new Mock <IReader>();

            //Setup the mock response of "ReadInstruction": each time it's called, iterate through the inputs to mimic a set of user instructions.
            var succession = reader.SetupSequence(r => r.ReadInstruction());

            foreach (var instruction in inputs)
            {
                succession = succession.Returns(instruction);
            }
            var app = new ToyRobotConsole.ToyRobotConsoleApp(robotOperator.Object, reader.Object);

            //Because Execute runs an infine loop, I'm testing on the logic inside each loop.
            var method = app.GetType().GetMethod("ObeyNextInstruction", BindingFlags.NonPublic | BindingFlags.Instance);

            //Act
            for (var i = 0; i < inputs.Length; i++)
            {
                method.Invoke(app, null);
            }

            //Assert
            robotOperator.Verify(ro => ro.InterpretInstruction(It.IsAny <Instruction>(), It.IsAny <string[]>()), Times.Exactly(inputs.Length));
        }
コード例 #2
0
        public void Constructor_ShouldThrowException_WhenPassedNoReader()
        {
            //Arrange
            Mock <IRobotOperator> robotOperator = new Mock <IRobotOperator>();
            Mock <IReporter>      reporter      = new Mock <IReporter>();
            IToyRobotApp          app;

            //Act
            Exception ex = Record.Exception(() => app = new ToyRobotConsole.ToyRobotConsoleApp(robotOperator.Object, reader: null));

            //Assert
            Assert.IsType <ArgumentNullException>(ex);
        }
コード例 #3
0
        public void Constructor_ShouldSucceed_WhenPassedValidArguments()
        {
            //Arrange
            Mock <IRobotOperator> robotOperator = new Mock <IRobotOperator>();
            Mock <IReader>        reader        = new Mock <IReader>();
            Mock <IReporter>      reporter      = new Mock <IReporter>();

            //Act
            var app = new ToyRobotConsole.ToyRobotConsoleApp(robotOperator.Object, reader.Object);

            //Assert
            Assert.NotNull(app);
            Assert.IsAssignableFrom <IToyRobotApp>(app);
            Assert.IsType <ToyRobotConsole.ToyRobotConsoleApp>(app);
        }