Description
Background and motivation
This feature is about allowing adding custom IValueFormatter
s to AssertionScope
. In my development I discovered that I need to selectively customize formatting of an object based on the test's context. There is an option to remove once added formatter but it will not play nicely if tests would be executed simultanously. Having scoped formatters have a side bonus of reusable parametrizing formatter instances.
API Proposal
First make IFormatterCollection
interface.
public interface IFormatterCollection : ICollection<IValueFormatter>
{
}
Then add it to AssertionScope
:
public class AssertionScope
{
public IFormatterCollection Formatters { get; } = // initialize from parent scope
}
Formatter
API remains unchanged. Internally it will utilize IFormatterCollection
for sake of coherence.
API Usage
using (var scope = new AssertionScope())
{
scope.Formatters .Add(new MyCustomFormatter())
// some assertions
}
Alternative Designs
Alternative would be to add a custom key-value store in AssertionScope
that could be read inside a IValueFormatter
.
Risks
None I can think of.
Are you willing to help with a proof-of-concept (as PR in that or a separate repo) first and as pull-request later on?
Yes, please assign this issue to me.