Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
269 views
in Technique[技术] by (71.8m points)

unit testing - Mock objects - Setup method - Test Driven Development

I am learning Test Driven Development and trying to use Moq library for mocking. What is the purpose of Setup method of Mock class?

question from:https://stackoverflow.com/questions/3179672/mock-objects-setup-method-test-driven-development

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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 ICalculator example, 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).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...