The default behaviour of a Moq Mock object is to stub all methods and properties. This means that a call to that method/property with any parameters will not fail and will return a default value for the particular return type.
You call Setup method for any or all of the following reasons:
- You want to restrict the input values to the method.
public interface ICalculator {
int Sum(int val1, val2);
}
var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
It.IsAny<int>(), //Any value
3 //value of 3
));
The above setup will match a call to method Sum with any value for val1 and val2 value of 3.
- You want to return a specific value. Continuing with
ICalculatorexample, the following setup will return a value of 10 regardless of the input parameters:
var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
It.IsAny<int>(), //Any value
It.IsAny<int>() //Any value
)).Returns(10);
- You want to use
Mock<T>.VerifyAll()after you setups to verify that all previous setups have been called (once).
var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
7, //value of 7
3 //value of 3
));
mock.Setup(m=>m.Sum(
5, //value of 5
3 //value of 3
));
mock.VerifyAll();
The above code verifies that Sum is called twice. Once with (7,3) and once with (5,3).