Walter.Extensions.Logging.MSTest
2024.8.25.1057
Prefix Reserved
See the version list below for details.
dotnet add package Walter.Extensions.Logging.MSTest --version 2024.8.25.1057
NuGet\Install-Package Walter.Extensions.Logging.MSTest -Version 2024.8.25.1057
<PackageReference Include="Walter.Extensions.Logging.MSTest" Version="2024.8.25.1057" />
paket add Walter.Extensions.Logging.MSTest --version 2024.8.25.1057
#r "nuget: Walter.Extensions.Logging.MSTest, 2024.8.25.1057"
// Install Walter.Extensions.Logging.MSTest as a Cake Addin #addin nuget:?package=Walter.Extensions.Logging.MSTest&version=2024.8.25.1057 // Install Walter.Extensions.Logging.MSTest as a Cake Tool #tool nuget:?package=Walter.Extensions.Logging.MSTest&version=2024.8.25.1057
About this NuGet Package
This package, Walter.Extensions.Logging.MSTest
, was created to assist in capturing and directing ILogger
output to the MSTest output window.
This is especially useful for debugging and tracing logs during test execution, ensuring that all log output is easily accessible in your test results.
How to Use:
Below are samples of how to integrate the package into a test project using the MSTest framework:
[TestClass]
public class MyFactoryTests
{
static TestContext? _context;
[ClassInitialize]
public static void ClassInit(TestContext context)
{
_context = context;
}
[TestMethod]
public void Test1()
{
using var service = new ServiceCollection()
//your DI configuration
//...
//this extension method assumes you use the Microsoft.Extensions.Logging NuGet package
.AddMsUnitTestLogger(_context!, Microsoft.Extensions.Logging.LogLevel.Debug);
.BuildServiceProvider();
...
}
...
}
2nd Sample
Perhaps a more complete option implementation will provide more value
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestProject
{
[TestClass]
public class UnitTest1
{
private static ServiceProvider? _serviceProvider;
[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
var serviceCollection = new ServiceCollection();
// Integrating Microsoft UnitTest ILogger support here
serviceCollection.AddMsUnitTestLogger(context, LogLevel.Debug);
_serviceProvider = serviceCollection.BuildServiceProvider();
}
[ClassCleanup]
public static void ClassCleanup()
{
_serviceProvider?.Dispose();
}
[TestMethod]
[ExpectedException(typeof(System.IO.DirectoryNotFoundException))]
public void TestMethod1()
{
if (_serviceProvider is null) Assert.Fail("Class setup failed");
// Get non-generic ILogger
var logger = _serviceProvider.GetRequiredService<ILogger>();
logger.LogInformation("This is a non-generic test log message.");
// Get generic ILogger<>
var genericLogger = _serviceProvider.GetRequiredService<ILogger<UnitTest1>>();
genericLogger.LogInformation("This is a generic test log message.");
try
{
var willFail = File.Open("x:\\dirNotfound\\and\\file\\doesNotExist.txt", FileMode.Open, FileAccess.Read);
}
catch (Exception ex)
{
genericLogger.LogException(ex);
throw;
}
}
}
}
Expected Output
When the above test is executed, the output will be captured in the MSTest TestContext and should appear similar to the following:
TestContext Messages:
Information: - This is a non-generic test log message.
Information: TestProject.UnitTest1 - This is a generic test log message.
Error: TestProject.UnitTest1 - Calling UnitTest1.TestMethod1 in C:\Users\wave\source\repos\Walter.Extensions.Logging.MSTest\TestProject\UnitTest1.cs generated a DirectoryNotFoundException on line: 49. The exception: Could not find a part of the path 'x:\dirNotfound\and\file\doesNotExist.txt'.
System.IO.DirectoryNotFoundException: Could not find a part of the path 'x:\dirNotfound\and\file\doesNotExist.txt'.
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.File.Open(String path, FileMode mode, FileAccess access)
at TestProject.UnitTest1.TestMethod1() in C:\Users\wave\source\repos\Walter.Extensions.Logging.MSTest\TestProject\UnitTest1.cs:line 45
Explanation
- Non-Generic Logger Output: Captures and displays the log message generated by the non-generic ILogger.
- Generic Logger Output: Displays log messages associated with the specific type UnitTest1, giving you more context about where the logs originated.
- Exception Logging: Demonstrates how the LogException extension method formats and logs an exception, providing detailed information including the exception type, the line number, and the error message.
By following this structure, users will have a clear understanding of both how to implement the package and what output to expect when running their tests.
Why Use the Walter.Extensions.Logging.MSTest Package?
Using the Walter.Extensions.Logging.MSTest NuGet package is an invaluable tool when you want to enhance your MSTest framework's logging capabilities. By directing ILogger output directly to the MSTest context, you gain several advantages:
- Enhanced Debugging: All log output is captured directly in the MSTest results, making it easy to trace what happened during the test, especially when tests fail.
- Seamless Integration: The package integrates effortlessly with your existing ILogger setup, requiring minimal changes to your test project.
- Increased Visibility: Log messages that would typically be difficult to access during automated test runs are now directly available, making it easier to diagnose issues.
Including in a Build Pipeline
Including Walter.Extensions.Logging.MSTest in your build pipeline offers significant benefits:
Log Parsing and Analysis: By capturing all log output during test execution, you can set up your build pipeline to parse the logs for specific patterns or errors, enabling automatic validation of log content as part of your integration tests.
Continuous Integration (CI) Insights: Integrating this logging capability within your CI pipeline allows for detailed insights into the test runs. If a test fails, the logs are readily available for examination without needing to replicate the issue locally.
Improved Test Coverage: Since logging can be crucial in understanding the flow and catching unexpected issues, having detailed logs helps ensure that your tests cover more than just expected outcomes—they also handle and document unexpected ones effectively.
In summary,
The Walter.Extensions.Logging.MSTest package enhances the visibility and usability of logs within MSTest, making it a powerful tool for both development and continuous integration environments.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net8.0-windows7.0 is compatible. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
- MSTest.TestFramework (>= 3.5.1)
- Walter (>= 2024.8.19.1111)
-
.NETStandard 2.0
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
- MSTest.TestFramework (>= 3.5.1)
- Walter (>= 2024.8.19.1111)
-
.NETStandard 2.1
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
- MSTest.TestFramework (>= 3.5.1)
- Walter (>= 2024.8.19.1111)
-
net6.0
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
- MSTest.TestFramework (>= 3.5.1)
- Walter (>= 2024.8.19.1111)
-
net7.0
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
- MSTest.TestFramework (>= 3.5.1)
- Walter (>= 2024.8.19.1111)
-
net8.0
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
- MSTest.TestFramework (>= 3.5.1)
- Walter (>= 2024.8.19.1111)
-
net8.0-windows7.0
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
- MSTest.TestFramework (>= 3.5.1)
- Walter (>= 2024.8.19.1111)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2024.8.25.1115 | 124 | 8/25/2024 |
2024.8.25.1057 | 122 | 8/25/2024 |
2024.8.19.1112 | 114 | 8/19/2024 |
2024.8.15.1410 | 114 | 8/15/2024 |
2024.8.5.1010 | 121 | 8/12/2024 |