powertools-lambda-dotnet
powertools-lambda-dotnet copied to clipboard
Feature request: Support of the assert of the `Logging.Log` buffer when testing
Use case
When creating Unit Tests, I want to be able to assert if the messages have been logged on the AWS.Lambda.Powertools.Logging.Logger
instance buffer.
This will be helpful to assert in the tests the logged messages for the current logger instance, like is possible with the Amazon.Lambda.TestUtilities
.
Is it already possible in some way? And/Or does this feature request make sense?
Solution/User Experience
Currently the Amazon.Lambda.TestUtilities
provides the TestLambdaLogger()
implementation of the ILambdaLogger
that stores all the messages in a buffer and writes the messages to the console.
With this helper we can assert if the message has been logged:
var logger = new TestLambdaLogger();
Assert.Contains("Processed message foobar", logger.Buffer.ToString());
Creating this kind of helper can be a good way to follow for the AWS.Lambda.Powertools.Logging.Logger
or creating a method to get the current logger instance.
Alternative solutions
No response
Acknowledgment
- [X] This feature request meets Powertools for AWS Lambda (.NET) Tenets
- [X] Should this be considered in other Powertools for AWS Lambda languages? i.e. Python, Java, and TypeScript
Thanks for opening your first issue here! We'll come back to you as soon as we can. In the meantime, check out the #dotnet channel on our Powertools for AWS Lambda Discord: Invite link
Thanks for opening the issue @coderade we are experimenting with different approaches: A couple of questions:
- How are you logging, can you share a snippet?
- Are you using a static Logger, creating a logging instance in the constructor or other?
- Are you using ILambdaContext outside the handler?
We are thinking of one approach, if in a Lambda environment (were we have access to context) we will write to the context.Log output so you will have the message in the TestLambdaLogger buffer and you can assert on that.