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;
}
}
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");
}
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");
}
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");
}
And more
Moq.It has way more methods to control input patterns.
Top comments (0)