Skip to content

Commit 3673239

Browse files
authored
Merge pull request #487 from tonyhallett/improve-logging
Improve logging
2 parents 0ad38f0 + 1aca674 commit 3673239

File tree

48 files changed

+295
-231
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+295
-231
lines changed

FineCodeCoverageTests/AppOptionsProvider_Tests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using AutoMoq;
55
using FineCodeCoverage.Core.Utilities;
66
using FineCodeCoverage.Options;
7+
using FineCodeCoverage.Output;
78
using Microsoft.VisualStudio.Settings;
89
using Moq;
910
using NUnit.Framework;
@@ -199,6 +200,7 @@ public void Should_Not_Default_Any_Other_AppOptions_Properties()
199200
nameof(IAppOptions.ThresholdForCrapScore),
200201
nameof(IAppOptions.ThresholdForNPathComplexity),
201202
nameof(IAppOptions.ThresholdForCyclomaticComplexity),
203+
nameof(IAppOptions.RunMsCodeCoverage),
202204
nameof(IAppOptions.NamespacedClasses),
203205
nameof(IAppOptions.ShowCoverageInOverviewMargin),
204206
nameof(IAppOptions.ShowCoveredInOverviewMargin),

FineCodeCoverageTests/CoverageProject_Settings_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using FineCodeCoverage.Core.Utilities;
33
using FineCodeCoverage.Engine.Model;
44
using FineCodeCoverage.Options;
5+
using FineCodeCoverage.Output;
56
using FineCodeCoverageTests.TestHelpers;
67
using Moq;
78
using NUnit.Framework;

FineCodeCoverageTests/CoverageToolOutput_Tests/CoverageToolOutputManager_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using FineCodeCoverage.Core.Utilities;
66
using FineCodeCoverage.Engine;
77
using FineCodeCoverage.Engine.Model;
8+
using FineCodeCoverage.Output;
89
using Moq;
910
using NUnit.Framework;
1011
using SharedProject.Core.CoverageToolOutput;

FineCodeCoverageTests/CoverletConsole_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using FineCodeCoverage.Engine.Coverlet;
1010
using FineCodeCoverage.Engine.Model;
1111
using FineCodeCoverage.Options;
12+
using FineCodeCoverage.Output;
1213
using Moq;
1314
using NUnit.Framework;
1415

FineCodeCoverageTests/CoverletDataCollectorUtil_RunAsync_Tests.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using FineCodeCoverage.Engine.Coverlet;
1111
using FineCodeCoverage.Engine.Model;
1212
using FineCodeCoverage.Options;
13+
using FineCodeCoverage.Output;
1314
using Moq;
1415
using NUnit.Framework;
1516

@@ -279,7 +280,7 @@ public async Task Should_Use_The_ProcessResponseProcessor_Async()
279280
mockProcesUtil.Setup(p => p.ExecuteAsync(It.IsAny<ExecuteRequest>(), ct).Result).Returns(executeResponse);
280281
var mockProcessResponseProcessor = mocker.GetMock<IProcessResponseProcessor>();
281282

282-
var logTitle = "Coverlet Collector Run (TestProject)";
283+
var logTitle = "Coverlet Collector Run (TestProject) - Output";
283284
mockProcessResponseProcessor.Setup(rp => rp.Process(executeResponse, It.IsAny<Func<int, bool>>(), true, logTitle, It.IsAny<Action>()));
284285

285286
await coverletDataCollectorUtil.RunAsync(ct);

FineCodeCoverageTests/DotNetToolList_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using AutoMoq;
33
using FineCodeCoverage.Core.Utilities;
44
using FineCodeCoverage.Engine.Coverlet;
5+
using FineCodeCoverage.Output;
56
using NUnit.Framework;
67

78
namespace FineCodeCoverageTests

FineCodeCoverageTests/Editor/DynamicCoverage/BufferLineCoverage_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using FineCodeCoverage.Engine.Model;
77
using FineCodeCoverage.Impl;
88
using FineCodeCoverage.Options;
9+
using FineCodeCoverage.Output;
910
using Microsoft.VisualStudio.Text;
1011
using Microsoft.VisualStudio.Text.Editor;
1112
using Moq;

FineCodeCoverageTests/Editor/DynamicCoverage/ContainingCodeTrackedLinesBuilder_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using FineCodeCoverage.Editor.DynamicCoverage;
44
using FineCodeCoverage.Editor.DynamicCoverage.TrackedLinesImpl.Construction;
55
using FineCodeCoverage.Engine.Model;
6+
using FineCodeCoverage.Output;
67
using FineCodeCoverageTests.TestHelpers;
78
using Microsoft.VisualStudio.Text;
89
using Moq;

FineCodeCoverageTests/FCCEngine_Tests.cs

+2-8
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using FineCodeCoverage.Engine.Model;
1212
using FineCodeCoverage.Engine.MsTestPlatform;
1313
using FineCodeCoverage.Engine.ReportGenerator;
14+
using FineCodeCoverage.Impl;
1415
using FineCodeCoverage.Options;
1516
using FineCodeCoverage.Output;
1617
using Moq;
@@ -105,13 +106,6 @@ public void SetUp()
105106
mockAppOptionsProvider.Setup(x => x.Get()).Returns(mockedAppOptions.Object);
106107
}
107108

108-
[Test]
109-
public async Task Should_Log_Starting_When_Initialized_Async()
110-
{
111-
await ReloadInitializedCoverage_Async();
112-
VerifyLogsReloadCoverageStatus(ReloadCoverageStatus.Start);
113-
}
114-
115109
[Test]
116110
public async Task Should_Prepare_For_Coverage_Suitable_CoverageProjects_Async()
117111
{
@@ -319,7 +313,7 @@ public async Task Should_Cancel_Existing_ReloadCoverage_When_ReloadCoverage_Asyn
319313

320314
private void VerifyLogsReloadCoverageStatus(ReloadCoverageStatus reloadCoverageStatus)
321315
{
322-
mocker.Verify<ILogger>(l => l.Log(fccEngine.GetLogReloadCoverageStatusMessage(reloadCoverageStatus)));
316+
mocker.Verify<ILogger>(l => l.Log(StatusMarkerProvider.Get(reloadCoverageStatus.ToString())));
323317
}
324318

325319
private async Task StopCoverage_Async()

FineCodeCoverageTests/Initializer_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using FineCodeCoverage.Core.Initialization;
99
using FineCodeCoverage.Engine;
1010
using FineCodeCoverage.Engine.Model;
11+
using FineCodeCoverage.Output;
1112
using Moq;
1213
using NUnit.Framework;
1314

FineCodeCoverageTests/MsCodeCoverage/MsCodeCoverageRunSettingsService_Collect_Tests.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
namespace FineCodeCoverageTests.MsCodeCoverage
2020
{
21-
2221
internal class MsCodeCoverageRunSettingsService_Test_Execution_Not_Finished_Tests
2322
{
2423
[Test]
@@ -126,7 +125,7 @@ public async Task Should_Not_Throw_If_No_Results_Async()
126125
public async Task Should_Combined_Log_When_No_Cobertura_Files_Async()
127126
{
128127
await RunAndProcessReportAsync(null, Array.Empty<string>());
129-
autoMocker.Verify<ILogger>(logger => logger.Log("No cobertura files for ms code coverage."));
128+
autoMocker.Verify<FineCodeCoverage.Output.ILogger>(logger => logger.Log("No cobertura files for ms code coverage."));
130129
autoMocker.Verify<IReportGeneratorUtil>(
131130
reportGenerator => reportGenerator.LogCoverageProcess("No cobertura files for ms code coverage.")
132131
);

FineCodeCoverageTests/MsCodeCoverage/MsCodeCoverageRunSettingsService_IsCollecting_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using FineCodeCoverage.Core.Utilities;
1616
using System.IO;
1717
using System;
18+
using FineCodeCoverage.Output;
1819

1920
namespace FineCodeCoverageTests.MsCodeCoverage
2021
{

FineCodeCoverageTests/ProcessResponseProcessor_Tests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using AutoMoq;
33
using FineCodeCoverage.Core.Utilities;
4+
using FineCodeCoverage.Output;
45
using NUnit.Framework;
56

67
namespace Test

FineCodeCoverageTests/TestContainerDiscovery_Tests.cs

+39-5
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,12 @@
1010
using FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage;
1111
using FineCodeCoverage.Impl;
1212
using FineCodeCoverage.Options;
13-
using Microsoft.Build.Evaluation;
1413
using Microsoft.VisualStudio.TestWindow.Extensibility;
1514
using Moq;
1615
using NUnit.Framework;
17-
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
1816

1917
namespace Test
2018
{
21-
2219
internal class TestOperationStateInvocationManager_Tests
2320
{
2421
private AutoMoqer mocker;
@@ -60,7 +57,7 @@ public void Should_Return_True_For_All_Other_States_If_Was_Initialized_When_Test
6057
public void Should_Log_When_Cannot_Invoke(TestOperationStates testOperationState)
6158
{
6259
testOperationStateInvocationManager.CanInvoke(testOperationState);
63-
mocker.Verify<ILogger>(logger => logger.Log($"Skipping {testOperationState} as FCC not initialized"));
60+
mocker.Verify<FineCodeCoverage.Output.ILogger>(logger => logger.Log($"Skipping {testOperationState} as FCC not initialized"));
6461
}
6562

6663
}
@@ -379,7 +376,7 @@ public void Should_Handle_Any_Exception_In_OperationState_Changed_Handler_Loggin
379376
var exception = new Exception();
380377
mocker.GetMock<IFCCEngine>().Setup(engine => engine.StopCoverage()).Throws(exception);
381378
RaiseTestExecutionCancelling();
382-
mocker.Verify<ILogger>(logger => logger.Log("Error processing unit test events", exception));
379+
mocker.Verify<FineCodeCoverage.Output.ILogger>(logger => logger.Log("Error processing unit test events", exception));
383380
}
384381

385382
[TestCase(true)]
@@ -429,5 +426,42 @@ public void Should_MsCodeCoverageRunSettingsService_TestExecutionNotFinishedAsyn
429426
mockMsCodeCoverageRunSettingsService.Verify(msCodeCoverageRunSettingsService => msCodeCoverageRunSettingsService.TestExecutionNotFinishedAsync(mockTestOperation.Object));
430427

431428
}
429+
430+
[Test]
431+
public void Should_Log_Coverage_Starting_With_Run_Number_When_TestExecutionStartingAsync_And_Coverage_Not_Disabled()
432+
{
433+
SetUpOptions(mockAppOptions =>
434+
{
435+
mockAppOptions.Setup(o => o.Enabled).Returns(true);
436+
});
437+
438+
var operation = new Mock<IOperation>().Object;
439+
RaiseTestExecutionStarting(operation);
440+
441+
mocker.Verify<FineCodeCoverage.Output.ILogger>(
442+
logger => logger.Log("================================== COVERAGE STARTING - 1 =================================="));
443+
444+
RaiseTestExecutionStarting(operation);
445+
446+
mocker.Verify<FineCodeCoverage.Output.ILogger>(
447+
logger => logger.Log("================================== COVERAGE STARTING - 2 =================================="));
448+
}
449+
450+
[Test]
451+
public void Should_Not_Log_Coverage_Starting_When_Coverage_Disabled()
452+
{
453+
SetUpOptions(mockAppOptions =>
454+
{
455+
mockAppOptions.Setup(o => o.Enabled).Returns(false);
456+
mockAppOptions.Setup(o => o.DisabledNoCoverage).Returns(true);
457+
});
458+
459+
var operation = new Mock<IOperation>().Object;
460+
RaiseTestExecutionStarting(operation);
461+
462+
mocker.Verify<FineCodeCoverage.Output.ILogger>(
463+
logger => logger.Log("================================== COVERAGE STARTING - 1 =================================="), Times.Never());
464+
465+
}
432466
}
433467
}

README.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ When not using Microsoft.TestingPlatform you have added test adapters through nu
2727

2828
Fine Code Coverage provides code coverage using one of 3 different coverage tools. In previous releases there were two coverage tools being utilised, OpenCover and Coverlet that will be referred to as 'old coverage'.
2929
Microsoft now provides a free coverage solution that you can choose to use by setting the Visual Studio Fine Code Coverage enumeration option RunMsCodeCoverage. This will probably be the preferred coverage
30-
tool for most developers. It is currently in Beta.
30+
tool for most developers.
3131

3232
With the old coverage it was possible for FCC to provide an abstraction over each tool's exclusion / inclusion options. This abstraction does not work for MS code coverage.
3333
Thus you will find that there are separate configuration options for Ms coverage vs old coverage and options that are common to the two.
@@ -109,8 +109,6 @@ The old coverage was based upon every test. Ms code coverage is coverage from th
109109

110110
## How to utilize MS Code Coverage with FCC ?
111111

112-
Firstly you need to change the RunMsCodeCoverage option from No.
113-
114112
Ms code coverage requires a [runsettings](https://docs.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file?view=vs-2022) file that is configured appropriately for
115113
code coverage. This requires that you have the ms code coverage package and have pointed to it with the TestAdaptersPaths element as well as specifying the ms data collector. [Exclusions and inclusions](https://docs.microsoft.com/en-us/visualstudio/test/customizing-code-coverage-analysis?view=vs-2022#include-or-exclude-assemblies-and-members)
116114
are also specified in the runsettings. I don't think that the documentation is clear enough on how this works so you may want to look at [this issue](https://github.com/microsoft/vstest/issues/3462).
@@ -349,7 +347,7 @@ If you are using option 1) then project and global options will only be used whe
349347
| DisabledNoCoverage | Set to false for VS Option Enabled=false to not disable coverage |
350348
| RunWhenTestsFail | By default coverage runs when tests fail. Set to false to prevent this. **Cannot be used in conjunction with RunInParallel** |
351349
| RunWhenTestsExceed | Specify a value to only run coverage based upon the number of executing tests. **Cannot be used in conjunction with RunInParallel** |
352-
| RunMsCodeCoverage | Change to IfInRunSettings to only collect with configured runsettings. Yes for runsettings generation. |
350+
| RunMsCodeCoverage | Change to IfInRunSettings to only collect with configured runsettings. Yes (default) for runsettings generation. No to use Coverlet or OpenCover. |
353351
| IncludeTestAssembly | Specifies whether to report code coverage of the test assembly |
354352
| IncludeReferencedProjects | Set to true to add all directly referenced projects to Include. |
355353
| IncludeAssemblies | Provide a list of assemblies to include in coverage. The dll name without extension is used for matching. |

SharedProject/Core/AppDataFolder.cs

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.Threading;
66
using FineCodeCoverage.Options;
7+
using FineCodeCoverage.Output;
78

89
namespace FineCodeCoverage.Engine
910
{

SharedProject/Core/CoverageToolOutput/CoverageToolOutputManager.cs

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Linq;
66
using FineCodeCoverage.Core.Utilities;
77
using FineCodeCoverage.Engine.Model;
8+
using FineCodeCoverage.Output;
89
using SharedProject.Core.CoverageToolOutput;
910

1011
namespace FineCodeCoverage.Engine

SharedProject/Core/CoverageUtilManager.cs

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.ComponentModel.Composition;
1+
using System.ComponentModel.Composition;
42
using System.Threading;
53
using System.Threading.Tasks;
64
using FineCodeCoverage.Engine.Coverlet;
75
using FineCodeCoverage.Engine.Model;
86
using FineCodeCoverage.Engine.OpenCover;
9-
using FineCodeCoverage.Engine.ReportGenerator;
107

118
namespace FineCodeCoverage.Engine
129
{

SharedProject/Core/Coverlet/Console/CoverletConsoleDotnetToolsGlobalExecutor.cs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.ComponentModel.Composition;
22
using FineCodeCoverage.Core.Utilities;
33
using FineCodeCoverage.Engine.Model;
4+
using FineCodeCoverage.Output;
45

56
namespace FineCodeCoverage.Engine.Coverlet
67
{

SharedProject/Core/Coverlet/Console/CoverletConsoleDotnetToolsLocalExecutor.cs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.ComponentModel.Composition;
22
using FineCodeCoverage.Core.Utilities;
33
using FineCodeCoverage.Engine.Model;
4+
using FineCodeCoverage.Output;
45

56
namespace FineCodeCoverage.Engine.Coverlet
67
{

SharedProject/Core/Coverlet/Console/CoverletConsoleUtil.cs

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading.Tasks;
77
using FineCodeCoverage.Core.Utilities;
88
using FineCodeCoverage.Engine.Model;
9+
using FineCodeCoverage.Output;
910

1011
namespace FineCodeCoverage.Engine.Coverlet
1112
{

SharedProject/Core/Coverlet/Console/DotNetToolListCoverlet.cs

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.ComponentModel.Composition;
44
using System.Linq;
55
using FineCodeCoverage.Core.Utilities;
6+
using FineCodeCoverage.Output;
67

78
namespace FineCodeCoverage.Engine.Coverlet
89
{

SharedProject/Core/Coverlet/DataCollector/CoverletDataCollectorUtil.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using FineCodeCoverage.Core.Utilities;
1111
using FineCodeCoverage.Core.Utilities.VsThreading;
1212
using FineCodeCoverage.Engine.Model;
13+
using FineCodeCoverage.Output;
1314
using Microsoft.VisualStudio.Shell;
1415
using Task = System.Threading.Tasks.Task;
1516

@@ -259,7 +260,7 @@ public async Task RunAsync(CancellationToken cancellationToken)
259260
// https://github.com/dotnet/sdk/blob/936935f18c3540ed77c97e392780a9dd82aca441/src/Cli/dotnet/commands/dotnet-test/Program.cs#L86
260261

261262
// test failure has exit code 1
262-
processResponseProcessor.Process(result, code => code == 0 || code == 1, true, GetLogTitle(), () =>
263+
processResponseProcessor.Process(result, code => code == 0 || code == 1, true, $"{GetLogTitle()} - Output", () =>
263264
{
264265
coverletDataCollectorGeneratedCobertura.CorrectPath(coverageProject.CoverageOutputFolder, coverageProject.CoverageOutputFile);
265266
});

SharedProject/Core/Coverlet/DataCollector/DataCollectorSettingsBuilder.cs

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.ComponentModel.Composition;
4-
using System.IO;
53
using System.Linq;
64
using System.Xml.Linq;
7-
using FineCodeCoverage.Options;
85

96
namespace FineCodeCoverage.Engine.Coverlet
107
{
@@ -14,12 +11,7 @@ internal class DataCollectorSettingsBuilder : IDataCollectorSettingsBuilder
1411
private string generatedRunSettingsPath;
1512
private string existingRunSettings;
1613
private bool runSettingsOnly;
17-
private readonly ILogger logger;
1814

19-
public DataCollectorSettingsBuilder(ILogger logger)
20-
{
21-
this.logger = logger;
22-
}
2315
#region Arguments
2416
internal string ProjectDll { get; set; }
2517
internal string Blame { get; set; }
@@ -72,7 +64,6 @@ public string Build()
7264
private void GenerateRunSettings()
7365
{
7466
var runSettingsDocument = existingRunSettings == null ? GenerateFullRunSettings() : GenerateRunSettingsFromExisting();
75-
logger.Log($"Saving run settings to {generatedRunSettingsPath}");
7667
runSettingsDocument.Save(generatedRunSettingsPath);
7768
}
7869

Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
using System.ComponentModel.Composition;
22
using FineCodeCoverage.Options;
3-
43
namespace FineCodeCoverage.Engine.Coverlet
54
{
65
[Export(typeof(IDataCollectorSettingsBuilderFactory))]
76
internal class DataCollectorSettingsBuilderFactory : IDataCollectorSettingsBuilderFactory
87
{
9-
private readonly ILogger logger;
10-
11-
[ImportingConstructor]
12-
public DataCollectorSettingsBuilderFactory(ILogger logger)
13-
{
14-
this.logger = logger;
15-
}
168
public IDataCollectorSettingsBuilder Create()
179
{
18-
return new DataCollectorSettingsBuilder(logger);
10+
return new DataCollectorSettingsBuilder();
1911
}
2012
}
2113
}

0 commit comments

Comments
 (0)