Skip to content

Commit ecb0b2b

Browse files
committed
Add MSTest trace logs when using MTP
1 parent c0dda3f commit ecb0b2b

File tree

5 files changed

+40
-10
lines changed

5 files changed

+40
-10
lines changed

src/Adapter/MSTest.TestAdapter/IPlatformServiceProvider.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ internal interface IPlatformServiceProvider
3030
IFileOperations FileOperations { get; }
3131

3232
/// <summary>
33-
/// Gets an instance to the platform service for trace logging.
33+
/// Gets or sets an instance to the platform service for trace logging.
3434
/// </summary>
35-
IAdapterTraceLogger AdapterTraceLogger { get; }
35+
IAdapterTraceLogger AdapterTraceLogger { get; set; }
3636

3737
/// <summary>
3838
/// Gets an instance of the test deployment service.

src/Adapter/MSTest.TestAdapter/PlatformServiceProvider.cs

+2-6
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,11 @@ public IFileOperations FileOperations
5858
}
5959

6060
/// <summary>
61-
/// Gets an instance to the platform service for trace logging.
61+
/// Gets or sets an instance to the platform service for trace logging.
6262
/// </summary>
6363
[field: AllowNull]
6464
[field: MaybeNull]
65-
public IAdapterTraceLogger AdapterTraceLogger
66-
{
67-
get => field ??= new AdapterTraceLogger();
68-
private set;
69-
}
65+
public IAdapterTraceLogger AdapterTraceLogger { get => field ??= new AdapterTraceLogger(); set; }
7066

7167
/// <summary>
7268
/// Gets an instance of the test deployment service.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3+
4+
#if !WINDOWS_UWP
5+
using Microsoft.Testing.Platform.Logging;
6+
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
7+
8+
namespace Microsoft.VisualStudio.TestTools.UnitTesting;
9+
10+
[SuppressMessage("ApiDesign", "RS0030:Do not use banned APIs", Justification = "MTP logger bridge")]
11+
internal sealed class BridgedTraceLogger : IAdapterTraceLogger
12+
{
13+
private readonly ILogger _logger;
14+
15+
public BridgedTraceLogger(ILogger logger)
16+
=> _logger = logger;
17+
18+
public void LogError(string format, params object?[] args)
19+
=> _logger.LogError(string.Format(CultureInfo.CurrentCulture, format, args));
20+
21+
public void LogInfo(string format, params object?[] args)
22+
=> _logger.LogInformation(string.Format(CultureInfo.CurrentCulture, format, args));
23+
24+
public void LogWarning(string format, params object?[] args)
25+
=> _logger.LogWarning(string.Format(CultureInfo.CurrentCulture, format, args));
26+
}
27+
#endif

src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBridgedTestFramework.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Testing.Extensions.VSTestBridge;
66
using Microsoft.Testing.Extensions.VSTestBridge.Requests;
77
using Microsoft.Testing.Platform.Capabilities.TestFramework;
8+
using Microsoft.Testing.Platform.Logging;
89
using Microsoft.Testing.Platform.Messages;
910
using Microsoft.Testing.Platform.Services;
1011
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
@@ -15,11 +16,15 @@ namespace Microsoft.VisualStudio.TestTools.UnitTesting;
1516
internal sealed class MSTestBridgedTestFramework : SynchronizedSingleSessionVSTestBridgedTestFramework
1617
{
1718
private readonly BridgedConfiguration? _configuration;
19+
private readonly ILoggerFactory _loggerFactory;
1820

1921
public MSTestBridgedTestFramework(MSTestExtension mstestExtension, Func<IEnumerable<Assembly>> getTestAssemblies,
2022
IServiceProvider serviceProvider, ITestFrameworkCapabilities capabilities)
2123
: base(mstestExtension, getTestAssemblies, serviceProvider, capabilities)
22-
=> _configuration = new(serviceProvider.GetConfiguration());
24+
{
25+
_configuration = new(serviceProvider.GetConfiguration());
26+
_loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
27+
}
2328

2429
/// <inheritdoc />
2530
protected override Task SynchronizedDiscoverTestsAsync(VSTestDiscoverTestExecutionRequest request, IMessageBus messageBus,
@@ -31,6 +36,7 @@ protected override Task SynchronizedDiscoverTestsAsync(VSTestDiscoverTestExecuti
3136
Debugger.Launch();
3237
}
3338

39+
PlatformServiceProvider.Instance.AdapterTraceLogger = new BridgedTraceLogger(_loggerFactory.CreateLogger("mstest-trace"));
3440
MSTestDiscoverer.DiscoverTests(request.AssemblyPaths, request.DiscoveryContext, request.MessageLogger, request.DiscoverySink, _configuration);
3541
return Task.CompletedTask;
3642
}
@@ -45,6 +51,7 @@ protected override async Task SynchronizedRunTestsAsync(VSTestRunTestExecutionRe
4551
Debugger.Launch();
4652
}
4753

54+
PlatformServiceProvider.Instance.AdapterTraceLogger = new BridgedTraceLogger(_loggerFactory.CreateLogger("mstest-trace"));
4855
MSTestExecutor testExecutor = new(cancellationToken);
4956

5057
if (request.VSTestFilter.TestCases is { } testCases)

test/UnitTests/MSTestAdapter.UnitTests/TestableImplementations/TestablePlatformServiceProvider.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public Mock<IReflectionOperations2> MockReflectionOperations
103103

104104
public IFileOperations FileOperations => MockFileOperations.Object;
105105

106-
public IAdapterTraceLogger AdapterTraceLogger => MockTraceLogger.Object;
106+
public IAdapterTraceLogger AdapterTraceLogger { get => MockTraceLogger.Object; set => throw new NotSupportedException(); }
107107

108108
public ITestDeployment TestDeployment => MockTestDeployment.Object;
109109

0 commit comments

Comments
 (0)