Unit testing 模拟对象-设置方法-测试驱动开发
我正在学习测试驱动开发,并尝试使用Moq库进行模拟。模拟类的设置方法的目的是什么?设置方法用于设置对模拟对象的期望 例如:Unit testing 模拟对象-设置方法-测试驱动开发,unit-testing,tdd,mocking,moq,Unit Testing,Tdd,Mocking,Moq,我正在学习测试驱动开发,并尝试使用Moq库进行模拟。模拟类的设置方法的目的是什么?设置方法用于设置对模拟对象的期望 例如: mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 这里您正在对模拟对象设置DoSomething方法。您的意思是,当参数为“ping”时,该方法返回true 现在,根据您的使用情况,该对象可以进一步充当模拟或存根。如果您想在基于状态的测试中使用它,它可以充当存根。如果您想在基于行为的测试中使用它,它可
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
这里您正在对模拟对象设置DoSomething
方法。您的意思是,当参数为“ping”时,该方法返回true
现在,根据您的使用情况,该对象可以进一步充当模拟或存根。如果您想在基于状态的测试中使用它,它可以充当存根。如果您想在基于行为的测试中使用它,它可以充当模拟。在行为测试中,您将调用模拟对象上的verify方法,以断言该方法是使用“ping”参数调用的
进一步参考以下链接:
Moq
Mock
对象的默认行为是存根所有方法和属性。这意味着使用任何参数调用该方法/属性都不会失败,并将返回特定返回类型的默认值
出于以下任何或所有原因调用Setup
方法:
- 您希望将输入值限制为该方法
- 您希望在设置后使用
来验证是否调用了以前的所有设置(一次)Mock.VerifyAll()
var mock=new mock();
mock.Setup(m=>m.Sum(
7,//值为7
3//3的值
));
mock.Setup(m=>m.Sum(
5,//值为5
3//3的值
));
mock.VerifyAll();
上面的代码验证是否调用了两次
Sum
。一次使用(7,3)
和一次使用(5,3)
我没有意识到可以多次调用Setup()来设置多个不同的参数,而这是我唯一看到它的地方。我如何做,Sum方法在涉及时将返回自定义异常消息?抛出(新异常(“测试消息”))?
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
));
var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
It.IsAny<int>(), //Any value
It.IsAny<int>() //Any value
)).Returns(10);
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();