For the complete documentation index, see llms.txt. This page is also available as Markdown.

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 updated