当项目可以是任何类型但必须具有特定属性集时,Moq如何进行设置

时间:2012-08-31 03:27:03

标签: moq

我正在尝试设置一个将运行的方法:

dataAccess.Setup(x => x.GetCars(It.IsAny<CarFilter>()));

好的,所以我说的是在方法GetCars传递任何CarFilter类型的对象时设置它。

我想更具体一点。

我希望这样做,以便在CarFilter CarFilter上的属性传递任何Color = "Red"类型的对象时进行设置。

有人知道如何写这个吗?

2 个答案:

答案 0 :(得分:1)

您可以使用It.Is(...)

为比赛添加条件
public class Car {
    public string Color { get; set; }
}

public interface IFoo {
   void DoIt(Car car);
}


[TestMethod]
public void PassesWhenRed() {

    var mockFoo = new Mock<IFoo>();

    var redCar = new Car { Color = "Red" };

    mockFoo.Object.DoIt(redCar);
    mockFoo.Verify(mk=>mk.DoIt(It.Is<Car>(car => car.Color == "Red")));   // Passes

}


[TestMethod]
public void FailsWhenNotRed() {

    var mockFoo = new Mock<IFoo>();

    var blueCar = new Car { Color = "Blue" };

    mockFoo.Object.DoIt(blueCar);
    mockFoo.Verify(mk=>mk.DoIt(It.Is<Car>(car => car.Color == "Red")));  // Fails

}

答案 1 :(得分:1)

结束需要:

dataAccess.Setup(x => x.GetCars(It.Is<CarFilter>(z => z.Color == "Red")));