public void ShouldConfigureMinAndMaxDefaultValuesOnConstructorIfParametersAreNull()
        {
            QuantityAnalysis quantityAnalysis = new QuantityAnalysis(null, null, null, null);

            Assert.AreEqual(quantityAnalysis.Min, int.MinValue);
            Assert.AreEqual(quantityAnalysis.Max, int.MaxValue);
        }
        public void ShouldReturnResultOnValidAnalyzeCall()
        {
            int min = 100;
            int max = 50;
            Mock <IAnalysisResult> analysisResultMock = new Mock <IAnalysisResult>();

            Mock <IQuantityAnalysisResultFactory> quantityAnalysisResultFactoryMock = new Mock <IQuantityAnalysisResultFactory>();

            quantityAnalysisResultFactoryMock.Setup(m => m.CreateInstance(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <bool>())).Returns(analysisResultMock.Object);
            Mock <IQuantitySearch> quantitySearchMock = new Mock <IQuantitySearch>();

            quantitySearchMock.Setup(m => m.Search(It.IsAny <IDNA>())).Returns(100);
            List <IQuantitySearch> listOfQuantitySearch = new List <IQuantitySearch>()
            {
                quantitySearchMock.Object
            };

            QuantityAnalysis quantityAnalysis = new QuantityAnalysis(min, max, quantityAnalysisResultFactoryMock.Object, listOfQuantitySearch);

            Mock <IDNA> dnaMock = new Mock <IDNA>();

            dnaMock.Setup(m => m.IsValid()).Returns(true);
            IAnalysisResult analysisResult = quantityAnalysis.Analyze(dnaMock.Object);

            Assert.AreEqual(analysisResult, analysisResultMock.Object);
        }
        private IQuantityAnalysis GetQuantityAnalysis()
        {
            int minMutantTest = 2;
            int maxMutantTest = int.MaxValue;

            /*
             * Para la prueba de integración necesito que devuelva objetos reales, por lo que voy a tener que crear instancias
             * de las clases de resultado
             */
            Mock <IQuantitySearch> quantitySearchMock             = new Mock <IQuantitySearch>();
            QuantityAnalysisResult positiveQuantityAnalysisResult = new QuantityAnalysisResult(0, 1, true);
            QuantityAnalysisResult negativeQuantityAnalysisResult = new QuantityAnalysisResult(0, 1, false);
            Mock <IUnityContainer> containerMock = new Mock <IUnityContainer>();

            containerMock.Setup(m => m.Resolve(typeof(IAnalysisResult), "quantityAnalysisResult", It.IsAny <ParameterOverride>(), It.IsAny <ParameterOverride>(), new ParameterOverride("result", true))).Returns(positiveQuantityAnalysisResult);
            containerMock.Setup(m => m.Resolve(typeof(IAnalysisResult), "quantityAnalysisResult", It.IsAny <ParameterOverride>(), It.IsAny <ParameterOverride>(), new ParameterOverride("result", false))).Returns(negativeQuantityAnalysisResult);

            IQuantityAnalysisResultFactory quantityAnalysisResultFactory = new QuantityAnalysisResultFactory(containerMock.Object);

            List <IQuantitySearch> quantitySearchList = new List <IQuantitySearch>()
            {
                new AllDirectionsSequenceQuantitySearch("AAAA"),
                new AllDirectionsSequenceQuantitySearch("TTTT"),
                new AllDirectionsSequenceQuantitySearch("CCCC"),
                new AllDirectionsSequenceQuantitySearch("GGGG")
            };

            IQuantityAnalysis quantityAnalysis = new QuantityAnalysis(minMutantTest, maxMutantTest, quantityAnalysisResultFactory, quantitySearchList);

            return(quantityAnalysis);
        }
        public void ShouldThrowExceptionWhenDNAIsInvalid()
        {
            int min = 100;
            int max = 50;
            Mock <IQuantityAnalysisResultFactory> quantityAnalysisResultFactoryMock = new Mock <IQuantityAnalysisResultFactory>();
            Mock <IQuantitySearch> quantitySearchMock   = new Mock <IQuantitySearch>();
            List <IQuantitySearch> listOfQuantitySearch = new List <IQuantitySearch>()
            {
                quantitySearchMock.Object
            };

            QuantityAnalysis quantityAnalysis = new QuantityAnalysis(min, max, quantityAnalysisResultFactoryMock.Object, listOfQuantitySearch);

            Mock <IDNA> dnaMock = new Mock <IDNA>();

            dnaMock.Setup(m => m.IsValid()).Returns(false);
            quantityAnalysis.Analyze(dnaMock.Object);
        }
        public void ShouldConfigurePropertiesProperlyOnConstrutor()
        {
            int min = 100;
            int max = 50;
            Mock <IQuantityAnalysisResultFactory> quantityAnalysisResultFactoryMock = new Mock <IQuantityAnalysisResultFactory>();
            Mock <IQuantitySearch> quantitySearchMock   = new Mock <IQuantitySearch>();
            List <IQuantitySearch> listOfQuantitySearch = new List <IQuantitySearch>()
            {
                quantitySearchMock.Object
            };

            QuantityAnalysis quantityAnalysis = new QuantityAnalysis(min, max, quantityAnalysisResultFactoryMock.Object, listOfQuantitySearch);

            Assert.AreEqual(min, quantityAnalysis.Min);
            Assert.AreEqual(max, quantityAnalysis.Max);
            Assert.AreEqual(listOfQuantitySearch, quantityAnalysis.QuantitySearchList);
            Assert.AreEqual(QuantityAnalysis.ClassKey, quantityAnalysis.Type);
        }