Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟类的成员,但不模拟类_C#_Unit Testing_Mocking_Moq - Fatal编程技术网

C# 模拟类的成员,但不模拟类

C# 模拟类的成员,但不模拟类,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,假设我有一门课是这样的: public class person { public string PersonName { get; set; } public Car PersonCar { get; set; } } 汽车的等级是这样的: public class Car { public bool CanStart { get; set; } } 现在在我的测试中,我正在使用Person类,但是我需要模拟Person类的Car成员,如果调用CanStart,则始

假设我有一门课是这样的:

public class person
{
    public string PersonName { get; set; }
    public Car PersonCar { get; set; }
}
汽车的等级是这样的:

public class Car
{
    public bool CanStart { get; set; }
}
现在在我的测试中,我正在使用Person类,但是我需要模拟Person类的Car成员,如果调用CanStart,则始终返回true。这可能吗?

您可以使用以下方法:

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

person.Car = mockCar.Object;

如果你想让CanStart总是返回true,为什么要嘲笑它?您可以这样做:

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

你为什么要嘲笑这个?为什么不使用一个真正的汽车物体呢?我的猜测是,你的真实情况有一些你没有向我们解释的相关方面。你为什么不创建一个CanStart总是返回true的模拟汽车,然后设置你的参数呢?人名?或者,您可以创建从Car派生的自己的类CarTest并重写CanStart属性。然后您可以:person.PersonCar=new CarTest。CanStart属性当然需要是虚拟的。该属性必须声明为虚拟的。是的,这是真的。或者创建接口。