嗨,团队,我是最小起订量的新手,无法理解
CallBase = true;
var mock = new Mock<IFoo> { CallBase = true };
Run Code Online (Sandbox Code Playgroud)
根据 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
下面写测试用例。我没有为我的模拟对象设置属性 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
}
Run Code Online (Sandbox Code Playgroud)
仍然高于测试用例在没有设置回调属性的情况下通过。有人可以解释一下CallBase = true这里的用法吗?
您不需要将 设为CallBase,true因为您只想验证是否 IsValidSpeed()返回true,对象的速度Ferrari将是提供给该PrintSpeed方法的速度。
因此,通过声明以下内容:
mock.Setup(x=>x.IsValidSpeed()).Returns(true);
Run Code Online (Sandbox Code Playgroud)
您可以模拟这个特定的场景,而无需了解如何实现的细节IsValidSpeed。
另一方面,试试这个。删除上面的行并将其设置CallBase为 true。这次您应该注意到断言将会失败。这是因为,false正如您在帖子中已经提到的,将调用实际方法并返回 的值。因此,在这种情况下,所提供的速度值不会分配给Speed。
| 归档时间: |
|
| 查看次数: |
3480 次 |
| 最近记录: |