Beispiel #1
0
        public async Task ExtractsMethodCallsBetweenServiceAndRepositoryClasses_When_EF60_NWProjectIsUsed()
        {
            //Arrange
            Solution solution = await new RoslynSolutionGenerator().GetSolutionAsync(@"..\..\..\..\ProjectsUnderTest\EF60_NW\EF60_NW.sln");

            var progressIndicator = new ProgressStub();

            var context            = new ContextStub <EntityFramework>();
            var dataContextDecExtr = new DataContextDeclarationExtractor(context);
            await dataContextDecExtr.FindDataContextDeclarationsAsync(solution, progressIndicator);

            var dbEntityExtractor = new DatabaseEntityDeclarationExtractorUsingDbContextProperties(context);
            await dbEntityExtractor.FindDatabaseEntityDeclarationsAsync(solution, progressIndicator);

            var dbAccessingMethodCallsExtractor = new DatabaseAccessingMethodCallExtractor(context);
            await dbAccessingMethodCallsExtractor.FindDatabaseAccessingMethodCallsAsync(solution, progressIndicator);

            var target = new CodeExecutionPathGenerator(context);

            //Act
            await target.GenerateCodeExecutionPathsAsync(solution, progressIndicator);

            //Assert
            Assert.IsTrue(target.CodeExecutionPaths.Count() == 2);
        }
        public void DetectsExcessiveDataAntiPattern_When_ThereIsOneQueryInTheTreeThatFetchesEagerlyAndEagerlyFetchedEntityIsNotUsed()
        {
            //Arrange
            var codeExecutionPath = new CodeExecutionPathGenerator()
                                    .WithEagerLoadingDatabaseAccessingMethodCall()
                                    .Build();

            //Act
            bool result = target.AppliesToModelTree(codeExecutionPath);

            //Assert
            Assert.IsTrue(result);
        }
        public IExtractionManager GetExtractionManager()
        {
            var context                  = new ConcreteContext <EntityFramework>();
            var dataContextDecExt        = new DataContextDeclarationExtractor(context);
            var dbEntityExt              = new DatabaseEntityDeclarationExtractorUsingDbContextProperties(context);
            var dbAccessingMethodCallExt = new DatabaseAccessingMethodCallExtractor(context);
            var codeExecutionPathExt     = new CodeExecutionPathGenerator(context);
            var progressIndicator        = new Progress <ExtractionProgress>((e) => ProgressChanged(e));
            var serializer               = new NewtonsoftSerializer <EntityFramework>();

            IExtractionManager extractionManager = new ExtractionManager <EntityFramework>(dataContextDecExt, dbEntityExt, dbAccessingMethodCallExt, codeExecutionPathExt, progressIndicator, serializer);

            return(extractionManager);
        }
Beispiel #4
0
 public ExtractionManager(DataContextDeclarationExtractor <T> dataContextDeclarationExtractor
                          , DatabaseEntityDeclarationExtractor <T> databaseEntityDeclarationExtractor
                          , DatabaseAccessingMethodCallExtractor <T> databaseAccessingMethodCallExtractor
                          , CodeExecutionPathGenerator <T> codeExecutionPathExtractor
                          , IProgress <ExtractionProgress> progressIndicator
                          , ISerializer <T> serializer)
 {
     _dataContextDeclarationExtractor      = dataContextDeclarationExtractor;
     _databaseEntityDeclarationExtractor   = databaseEntityDeclarationExtractor;
     _databaseAccessingMethodCallExtractor = databaseAccessingMethodCallExtractor;
     _codeExecutionPathExtractor           = codeExecutionPathExtractor;
     _progressIndicator = progressIndicator;
     _serializer        = serializer;
 }
        public void DetectsAntiPattern_When_ThereIsOneQueryInTheTreeThatDoesLazyLoadingAndRelatedEntityIsUsedInALoop()
        {
            //Arrange
            var codeExecutionPath = new CodeExecutionPathGenerator()
                                    .WithLazyLoadingDatabaseAccessingMethodCall()
                                    .WithDatabaseEntityVariableAssignedByDatabaseAccessingMethodCall()
                                    .WithCallToRelatedEntityOnDatabaseEntityVariableAssignedByDatabaseAccessingMethodCall()
                                    .Build();

            ////Act
            bool result = target.AppliesToModelTree(codeExecutionPath);

            ////Assert
            Assert.IsTrue(result);
        }