private static void WriteCodeCoverageInfo(List <BlockLineRange> lines, CodeCoverageInfo mi, StreamWriter file) { file.WriteLine("Method {0}{1}{2}{3}{4} has:", mi.NamespaceName == null ? "" : mi.NamespaceName, string.IsNullOrEmpty(mi.NamespaceName) ? "" : ".", mi.ClassName == null ? "" : mi.ClassName, string.IsNullOrEmpty(mi.ClassName) ? "" : ".", mi.MethodName ); Console.WriteLine("Method {0}{1}{2}{3}{4} has:", mi.NamespaceName == null ? "" : mi.NamespaceName, string.IsNullOrEmpty(mi.NamespaceName) ? "" : ".", mi.ClassName == null ? "" : mi.ClassName, string.IsNullOrEmpty(mi.ClassName) ? "" : ".", mi.MethodName ); Console.WriteLine(" {0} blocks covered", mi.Statistics.BlocksCovered); Console.WriteLine(" {0} blocks not covered", mi.Statistics.BlocksNotCovered); Console.WriteLine(" {0} lines covered", mi.Statistics.LinesCovered); Console.WriteLine(" {0} lines partially covered", mi.Statistics.LinesPartiallyCovered); Console.WriteLine(" {0} lines not covered", mi.Statistics.LinesNotCovered); file.WriteLine(" {0} blocks covered", mi.Statistics.BlocksCovered); file.WriteLine(" {0} blocks not covered", mi.Statistics.BlocksNotCovered); file.WriteLine(" {0} lines covered", mi.Statistics.LinesCovered); file.WriteLine(" {0} lines partially covered", mi.Statistics.LinesPartiallyCovered); file.WriteLine(" {0} lines not covered", mi.Statistics.LinesNotCovered); lines.Clear(); }
public static void DoAnalysis(String inputFile) { using (CoverageInfo info = CoverageInfo.CreateFromFile(inputFile)) { List <BlockLineRange> lines = new List <BlockLineRange>(); System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\CodeCoverage\myTest.txt"); List <CodeCoverageInfo> ccInfoList = new List <CodeCoverageInfo>(); uint totalBlocksCovered = 0; uint totalBlocksNotCovered = 0; foreach (ICoverageModule module in info.Modules) { byte[] coverageBuffer = module.GetCoverageBuffer(null); using (ISymbolReader reader = module.Symbols.CreateReader()) { uint methodId; string methodName; string undecoratedMethodName; string className; string namespaceName; lines.Clear(); while (reader.GetNextMethod( out methodId, out methodName, out undecoratedMethodName, out className, out namespaceName, lines)) { CodeCoverageInfo ccInfo = new CodeCoverageInfo(); CoverageStatistics stats = CoverageInfo.GetMethodStatistics(coverageBuffer, lines); ccInfo.MethodId = methodId; ccInfo.MethodName = methodName; ccInfo.UndecoratedMethodName = undecoratedMethodName; ccInfo.ClassName = className; ccInfo.NamespaceName = namespaceName; ccInfo.Statistics = stats; totalBlocksCovered += ccInfo.Statistics.BlocksCovered; totalBlocksNotCovered += ccInfo.Statistics.BlocksNotCovered; ccInfoList.Add(ccInfo); lines.Clear(); } } } WriteCodeCoverageTotalCoverage(totalBlocksCovered, totalBlocksNotCovered, file); IEnumerable <CodeCoverageInfo> sortedList = ccInfoList.OrderBy(mi => mi.NamespaceName + mi.ClassName + mi.MethodName); foreach (var mi in sortedList) { WriteCodeCoverageInfo(lines, mi, file); } file.Close(); } }