Custom matchers
When defining argument expectations, developers can use It.Is to apply custom predicates to incoming parameters.
mock.Verify(p => p.DoSomething(It.Is<string>(s => s.Length > 100)));
Over time, developers might want to collect these custom expressions into a library. Unfortunately, the matching expressions can't be extracted as they are because
It.Is<T>
accepts an Expression<Func<T, bool>>
instead of a simple Func<T, bool>
delegate.To support this use case, Moq gives developers the possibility to create custom matchers. A custom matcher is an expression that wraps a delegate so that it can be used when defining an argument expectation.
public static class ParameterExpectations
{
[Matcher]
public static string StringLongerThan(int size) => Moq.Match.Create<string>(s => s.Length > size);
}
mock.Verify(p => p.DoSomething(ParameterExpectations.StringLongerThan(100)));
Last modified 3yr ago