예제 #1
0
        //[Fact]
        public void CheckDesignConstraintsOfQueryMyDesign()
        {
            var sut = new TypeDependencyStructureMatrix(new[] { typeof(CecilExtensions).Assembly });

            var problematicTypes =
                from t in sut.DefinedMembers
                let distanceFromMainSequence = sut.GetDistanceFromMainSequence(t)
                where distanceFromMainSequence > 0.5
                && !t.Namespace.StartsWith("System.Diagnostics.Contracts")
                && !t.Namespace.Contains("JetBrains")
                orderby distanceFromMainSequence descending
                select new {t, Pain = sut.GetAmountOfPain(t), Uselesness = sut.GetUselesness(t), I = sut.GetInstability(t), A = sut.GetAbstractness(t)};

            problematicTypes.Each(Console.WriteLine);

            Assert.Empty(problematicTypes);
        }
예제 #2
0
        public void DsmCanCalculateTypesDistanceFromMainSequence()
        {
            var sut = new TypeDependencyStructureMatrix(new[] { typeof(A.A1).Assembly });

            double aDistance = sut.GetDistanceFromMainSequence<A.A1>();

            Assert.Equal(0, aDistance);

            double fDistance = sut.GetDistanceFromMainSequence<F>();

            Assert.Equal(0.5, fDistance);

            double gDistance = sut.GetDistanceFromMainSequence<G>();

            Assert.Equal(0.0, gDistance);

            var tenWorstTypes =
                (from t in sut.DefinedMembers
                 let distanceFromMainSequence = sut.GetDistanceFromMainSequence(t)
                 where t.DeclaringType == null
                 orderby distanceFromMainSequence descending
                 select new { t, distanceFromMainSequence, A=sut.GetAbstractness(t), I=sut.GetInstability(t) }).Take(10);

            tenWorstTypes.Each(t => Console.WriteLine(t.t + "\t: " + t.distanceFromMainSequence + "(A=" + t.A + ", I=" + t.I + ")"));
        }
예제 #3
0
        public void DsmCanCalculateTypeInstabilityForIsolatedType()
        {
            var sut = new TypeDependencyStructureMatrix(new[] { typeof(A.A1).Assembly });

            double instability = sut.GetInstability<DontUseMe>();

            Assert.Equal(0, instability);
        }
예제 #4
0
        public void DsmCanCalculateTypeInstability()
        {
            var sut = new TypeDependencyStructureMatrix(new[] { typeof(A.A1).Assembly });

            double aInstability = sut.GetInstability<A.A1>();

            Assert.Equal(1, aInstability);

            double eInstability = sut.GetInstability<E>();

            Assert.Equal(0, eInstability);
        }
예제 #5
0
        public void DsmCanCalculateTypeAbstractnessForEmptyType()
        {
            var sut = new TypeDependencyStructureMatrix(new[] { typeof(A.A1).Assembly });

            double abstractness = sut.GetAbstractness<DontUseMe>();

            Assert.Equal(1.0, abstractness);
        }
예제 #6
0
        public void DsmCanCalculateTypeAbstractness()
        {
            var sut = new TypeDependencyStructureMatrix(new[] { typeof(A.A1).Assembly });

            double aAbstractness = sut.GetAbstractness<A.A1>();

            Assert.Equal(0, aAbstractness);

            double fAbstractness = sut.GetAbstractness<F>();

            Assert.Equal(0.5, fAbstractness);

            double gAbstractness = sut.GetAbstractness<G>();

            Assert.Equal(1.0, gAbstractness);
        }
예제 #7
0
        public void DsmCanCalculateAmountOfPainAndUselesnessOfAUselessType()
        {
            // Arrange
            var sut = new TypeDependencyStructureMatrix(new[] { typeof(A.A1).Assembly });

            // Act
            double pain = sut.GetAmountOfPain<UselessType>();
            double uselessNess = sut.GetUselesness<UselessType>();

            // Assert
            Assert.Equal(0, pain);
            Assert.Equal(1, uselessNess);
        }