团队大家好,我是moq新手,不太理解的概念是:
CallBase = true;
var mock = new Mock<IFoo> { CallBase = true };
根据Git Hub的说法:如果没有覆盖成员的期望值,则调用基类实现。但是,我有下面的测试用例,在没有使用CallBase = true的情况下就能够模拟基类成员。
// Creating Base class.
public abstract class Car
{
public virtual bool IsValidSpeed()
{
///complex logic
///returnig false just to compile code
return false;
}
}
// Creating child class
public class Ferrari : Car
{
public int Speed { get; set; }
public void PrintSpeed(int speed)
{
if (IsValidSpeed())
{
Speed = speed;
}
}
}
以下是编写测试用例。 我没有为我的模拟对象设置CallBase = true属性。
public void MoqPracticeTest2()
{
// var mock = new Mock<Ferrari>() { CallBase = true };
var mock = new Mock<Ferrari>(MockBehavior.Strict);
//Mocking Base class function
mock.Setup(x=>x.IsValidSpeed()).Returns(true);
//calling function which will call base function
mock.Object.PrintSpeed(100);
//calling Verify on mock object
mock.Verify(x => x.IsValidSpeed(), Times.Once);
Assert.AreEqual(mock.Object.Speed,100); //Doing Assert
}
仍然存在一个测试用例,在未设置回调属性的情况下通过了测试。
请问有人能解释一下这里使用 CallBase = true
的作用吗?
mock.Setup(x=>x.IsValidSpeed()).Returns(true);
。如果是这样的话,这很合理,因为只有当你没有提供类似上述设置时,才会调用基本实现。 - Christos