DEV Community

Kenichiro Nakamura
Kenichiro Nakamura

Posted on

5 1

Moq: How to specify the argument with detail condition when mock a method?

This is my own note to remember how we can pass argument to mocked method in various ways.

Method to mock

I mock following service as an example, though this does nothing anyway.

public class DummyService
{
    public virtual string DummyMethod(string input)
    {
        return input;
    }
}
Enter fullscreen mode Exit fullscreen mode

Mock method with any value

We can use It.IsAny<T> to mock the method which accepts any value of T.

[Fact]
public void Test()
{
    Mock<DummyService> mockedDummyService = new();
    mockedDummyService.Setup(x => 
        x.DummyMethod(It.IsAny<string>())).Returns("dummy result");
}
Enter fullscreen mode Exit fullscreen mode

Mock method with specify value

We can pass actual value to mock the method which triggered only when the argument exactly matches.

[Fact]
public void Test()
{
    Mock<DummyService> mockedDummyService = new();
    mockedDummyService.Setup(x => 
        x.DummyMethod("testInput")).Returns("dummy result");
}
Enter fullscreen mode Exit fullscreen mode

Mock method with more detail condition

Or, we can specify more detail condition by using It.Is<T>(Func<T, bool>). The method will be triggered when I pass string such as MyInput, MyValue, etc.

[Fact]
public void Test()
{
    Mock<DummyService> mockedDummyService = new();
    mockedDummyService.Setup(x => 
        x.DummyMethod(It.Is<string>(x=>x.StartsWith("My")))).Returns("dummy result");
}
Enter fullscreen mode Exit fullscreen mode

And more

Moq.It has way more methods to control input patterns.

Image description

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs