public void Hotspot_Metrics() { // arrage var assembly = new Assembly("assembly"); var @class = new Class("class", assembly); assembly.AddClass(@class); var method = new MethodMetric("method"); method.AddMetric(new Metric(ReportResources.CyclomaticComplexity, null, 1)); method.AddMetric(new Metric(ReportResources.SequenceCoverage, null, 2)); method.AddMetric(new Metric(ReportResources.BranchCoverage, null, 3)); method.AddMetric(new Metric(ReportResources.CrapScore, null, 4)); @class.AddMethodMetric(method); var assemblies = new List <Assembly> { assembly }; // act var hotspots = RiskHotspotsAnalysis.DetectHotspots(assemblies); // assert var hotspot = hotspots.First(); Assert.AreEqual(1, hotspot.Complexity); Assert.AreEqual(2, hotspot.Coverage); Assert.AreEqual(3, hotspot.BranchCoverage); Assert.AreEqual(4, hotspot.CrapScore); }
public void Hotspots_Count_Limited_ToTopThree() { // arrage var assembly = new Assembly("assembly"); var class1 = new Class("class1", assembly); var class2 = new Class("class2", assembly); var class3 = new Class("class3", assembly); var class4 = new Class("class4", assembly); var class5 = new Class("class5", assembly); assembly.AddClass(class1); assembly.AddClass(class2); assembly.AddClass(class3); assembly.AddClass(class4); assembly.AddClass(class5); var method1 = new MethodMetric("method1", new List <Metric> { new Metric(ReportResources.CrapScore, null, 40) }); var method2 = new MethodMetric("method2", new List <Metric> { new Metric(ReportResources.CrapScore, null, 30) }); var method3 = new MethodMetric("method3", new List <Metric> { new Metric(ReportResources.CrapScore, null, 20) }); var method4 = new MethodMetric("method4", new List <Metric> { new Metric(ReportResources.CrapScore, null, 10) }); var method5 = new MethodMetric("method5", new List <Metric> { new Metric(ReportResources.CrapScore, null, 50) }); class1.AddMethodMetric(method1); class2.AddMethodMetric(method2); class3.AddMethodMetric(method3); class4.AddMethodMetric(method4); class5.AddMethodMetric(method5); var assemblies = new List <Assembly> { assembly }; // act const int maxHotspots = 3; var hotspots = RiskHotspotsAnalysis.DetectHotspots(assemblies, maxHotspots); // assert var hotspotsList = hotspots.ToList(); Assert.AreEqual(maxHotspots, hotspotsList.Count); Assert.AreEqual("method5", hotspotsList[0].MethodNameShort); Assert.AreEqual("method1", hotspotsList[1].MethodNameShort); Assert.AreEqual("method2", hotspotsList[2].MethodNameShort); Assert.AreEqual(50, hotspotsList[0].CrapScore); Assert.AreEqual(40, hotspotsList[1].CrapScore); Assert.AreEqual(30, hotspotsList[2].CrapScore); }
public void NoHotspots_WhenNoAssemblies() { // arrage var assemblies = new List <Assembly>(); // act var hotspots = RiskHotspotsAnalysis.DetectHotspots(assemblies); // assert Assert.AreEqual(0, hotspots.Count()); }
public void OneHotspot_ForEveryClass() { // arrage var assembly1 = new Assembly("assembly1"); var assembly2 = new Assembly("assembly2"); var @class1A = new Class("class1A", assembly1); var @class1B = new Class("class1B", assembly1); var @class2A = new Class("class2A", assembly2); var @class2B = new Class("class2B", assembly1); assembly1.AddClass(@class1A); assembly1.AddClass(@class1B); assembly2.AddClass(@class2A); assembly2.AddClass(@class2B); var method1A1 = new MethodMetric("method1A1", new List <Metric> { new Metric("dummyMetric", null, 1) }); var method1A2 = new MethodMetric("method1A2", new List <Metric> { new Metric("dummyMetric", null, 1) }); @class1A.AddMethodMetric(method1A1); @class1A.AddMethodMetric(method1A2); var method1B1 = new MethodMetric("method1B1", new List <Metric> { new Metric("dummyMetric", null, 1) }); var method1B2 = new MethodMetric("method1B2", new List <Metric> { new Metric("dummyMetric", null, 1) }); @class1B.AddMethodMetric(method1B1); @class1B.AddMethodMetric(method1B2); var method2A1 = new MethodMetric("method2A1", new List <Metric> { new Metric("dummyMetric", null, 1) }); @class2A.AddMethodMetric(method2A1); var method2B1 = new MethodMetric("method2B1", new List <Metric> { new Metric("dummyMetric", null, 1) }); @class2B.AddMethodMetric(method2B1); var assemblies = new List <Assembly> { assembly1, assembly2 }; // act var hotspots = RiskHotspotsAnalysis.DetectHotspots(assemblies); // assert Assert.AreEqual(4, hotspots.Count()); }
public void OnlyWorstHotspot_Taken_FromEveryClass() { // arrage var assembly = new Assembly("assembly"); var classA = new Class("classA", assembly); assembly.AddClass(classA); var methodA1 = new MethodMetric("methodA1", new List <Metric> { new Metric(ReportResources.CrapScore, null, 2) }); var methodA2 = new MethodMetric("methodA2", new List <Metric> { new Metric(ReportResources.CrapScore, null, 22) }); classA.AddMethodMetric(methodA1); classA.AddMethodMetric(methodA2); var classB = new Class("classB", assembly); assembly.AddClass(classB); var methodB1 = new MethodMetric("methodB1", new List <Metric> { new Metric(ReportResources.CrapScore, null, 11) }); var methodB2 = new MethodMetric("methodB2", new List <Metric> { new Metric(ReportResources.CrapScore, null, 1) }); classB.AddMethodMetric(methodB1); classB.AddMethodMetric(methodB2); var assemblies = new List <Assembly> { assembly }; // act var hotspots = RiskHotspotsAnalysis.DetectHotspots(assemblies); // assert var hotspotsList = hotspots.ToList(); Assert.AreEqual("assembly", hotspotsList[0].AssemblyShortName); Assert.AreEqual("assembly", hotspotsList[1].AssemblyShortName); Assert.AreEqual("classA", hotspotsList[0].ClassNameShort); Assert.AreEqual("classB", hotspotsList[1].ClassNameShort); Assert.AreEqual("methodA2", hotspotsList[0].MethodNameShort); Assert.AreEqual("methodB1", hotspotsList[1].MethodNameShort); Assert.AreEqual(22, hotspotsList[0].CrapScore); Assert.AreEqual(11, hotspotsList[1].CrapScore); }
public void Hotspots_SortedBy_CrapScore() { // arrage var assembly = new Assembly("assembly"); var class1 = new Class("class1", assembly); var class2 = new Class("class2", assembly); var class3 = new Class("class3", assembly); assembly.AddClass(class1); assembly.AddClass(class2); assembly.AddClass(class3); var method1 = new MethodMetric("method1", new List <Metric> { new Metric(ReportResources.CrapScore, null, 10) }); var method2 = new MethodMetric("method2", new List <Metric> { new Metric(ReportResources.CrapScore, null, 30) }); var method3 = new MethodMetric("method3", new List <Metric> { new Metric(ReportResources.CrapScore, null, 20) }); class1.AddMethodMetric(method1); class2.AddMethodMetric(method2); class3.AddMethodMetric(method3); var assemblies = new List <Assembly> { assembly }; // act var hotspots = RiskHotspotsAnalysis.DetectHotspots(assemblies); // assert var hotspotsList = hotspots.ToList(); Assert.AreEqual("method2", hotspotsList[0].MethodNameShort); Assert.AreEqual("method3", hotspotsList[1].MethodNameShort); Assert.AreEqual("method1", hotspotsList[2].MethodNameShort); Assert.AreEqual(30, hotspotsList[0].CrapScore); Assert.AreEqual(20, hotspotsList[1].CrapScore); Assert.AreEqual(10, hotspotsList[2].CrapScore); }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="summaryResult">The summary result.</param> public virtual void CreateSummaryReport(IReportRenderer reportRenderer, SummaryResult summaryResult) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (summaryResult == null) { throw new ArgumentNullException(nameof(summaryResult)); } reportRenderer.BeginSummaryReport(this.ReportConfiguration.TargetDirectory, null, ReportResources.Summary); reportRenderer.Header(ReportResources.Summary); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.GeneratedOn, DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToLongTimeString()); reportRenderer.KeyValueRow(ReportResources.Parser, summaryResult.UsedParser); reportRenderer.KeyValueRow(ReportResources.Assemblies2, summaryResult.Assemblies.Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Classes, summaryResult.Assemblies.SelectMany(a => a.Classes).Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Files2, summaryResult.Assemblies.SelectMany(a => a.Classes).SelectMany(a => a.Files).Distinct().Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, summaryResult.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (summaryResult.CoverableLines - summaryResult.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, summaryResult.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, summaryResult.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, summaryResult.CoverageQuota.HasValue ? summaryResult.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture) + "%" : string.Empty); decimal?branchCoverage = summaryResult.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, branchCoverage.Value.ToString(CultureInfo.InvariantCulture) + "%"); } if (this.ReportConfiguration.Tag != null) { reportRenderer.KeyValueRow(ReportResources.Tag, this.ReportConfiguration.Tag); } reportRenderer.FinishTable(); var historicCoverages = this.GetOverallHistoricCoverages(this.ReportConfiguration.OverallHistoricCoverages); if (historicCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(historicCoverages); } var summableMetrics = summaryResult.Assemblies .SelectMany(a => a.Classes) .SelectMany(c => c.MethodMetrics) .SelectMany(m => m.Metrics) .Where(m => m.MetricType == MetricType.CoverageAbsolute) .GroupBy(m => m.Name) .Select(g => new Metric(g.Key, g.First().ExplanationUrl, MetricType.CoverageAbsolute, g.Sum(m => m.Value))) .ToArray(); if (summableMetrics.Length > 0) { reportRenderer.Header(ReportResources.Metrics); var methodMetric = new MethodMetric(ReportResources.Total, summableMetrics); reportRenderer.BeginMetricsTable(methodMetric); reportRenderer.MetricsRow(methodMetric); reportRenderer.FinishTable(); } var hotspots = RiskHotspotsAnalysis.DetectHotspotsByMetricName(summaryResult.Assemblies); if (hotspots.Any()) { reportRenderer.Header(ReportResources.RiskHotspots); reportRenderer.RiskHotspots(hotspots); } reportRenderer.Header(ReportResources.Coverage3); if (summaryResult.Assemblies.Any()) { reportRenderer.BeginSummaryTable(summaryResult.SupportsBranchCoverage); foreach (var assembly in summaryResult.Assemblies) { reportRenderer.SummaryAssembly(assembly, summaryResult.SupportsBranchCoverage); foreach (var @class in assembly.Classes) { reportRenderer.SummaryClass(@class, summaryResult.SupportsBranchCoverage); } } reportRenderer.FinishTable(); } else { reportRenderer.Paragraph(ReportResources.NoCoveredAssemblies); } reportRenderer.CustomSummary(summaryResult.Assemblies, hotspots, summaryResult.SupportsBranchCoverage); reportRenderer.AddFooter(); reportRenderer.SaveSummaryReport(this.ReportConfiguration.TargetDirectory); }