【问题标题】:Mock a member of class but not the class模拟班级成员但不模拟班级
【发布时间】:2014-07-28 09:35:44
【问题描述】:

假设我有这样的课程:

public class person
{
    public string PersonName { get; set; }
    public Car PersonCar { get; set; }
}

Car 类类似于:

public class Car
{
    public bool CanStart { get; set; }
}

现在在我的测试中,我正在使用 Person 类,但我需要模拟 Person 类的 Car 成员,并且如果调用 CanStart 则始终返回 true。这可能吗?

【问题讨论】:

  • 为什么要模拟这个?为什么不直接使用真正的Car 对象?我的猜测是你的真实情况有一些你没有向我们解释的相关方面。
  • 你为什么不创建一个 Car 的模拟,其 CanStart 总是返回 true,然后将你的 persons(大写?)PersonCar(命名?)属性设置为那个模拟?
  • 或者,您可以创建自己的类 CarTest,该类派生自 Car 并覆盖 CanStart 属性。然后你可以:person.PersonCar = new CarTest()CanStart 属性当然需要是虚拟的。

标签: c# unit-testing mocking moq


【解决方案1】:

你可以用这个:

var person = new Person();
var mockCar = new Mock<Car>();
mockCar.SetupGet(c => c.CanStart).Returns(true);

person.Car = mockCar.Object;

【讨论】:

  • 该属性必须被声明为虚拟的。
  • 是的,这是真的。或者创建接口。
【解决方案2】:

如果您希望 CanStart 始终返回 true,为什么要模拟它?你可以这样做:

var person = new Person
{
    PersonCar = new Car
    {
        CanStart = true
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多