Moq C#,我怎么能嘲笑这个班?

Moq C#,我怎么能嘲笑这个班?,c#,unit-testing,testing,mocking,moq,C#,Unit Testing,Testing,Mocking,Moq,我需要使用Moq框架模拟这个C#WebApi类 public class PvValuesController { private readonly IDataServices dataService; public PvValuesController(IDataServices dataServices) { dataService = dataServices; } [

我需要使用Moq框架模拟这个C#WebApi类

   public class PvValuesController
    {
        private readonly IDataServices dataService;

        public PvValuesController(IDataServices dataServices)
        {
            dataService = dataServices;
        }

        [HttpGet]
        public IHttpActionResult Get(string id, string st, string et)
        {
            if (dataService == null)
            {
                return BadRequest("DataService not found");
            }

            var result = dataService.GetPvData(id, st, et);   
            return Ok(result);
        }
    }
问题是,如果我这样嘲笑它:

var controllerMock = new Mock<PvValuesController>();
其中dataService是IDataService的一个具体实例,是一个复杂的对象

我怎样才能有效地模仿这样的课堂

编辑:

我的新测试代码:

[Test]
public async void TestMoq()
{
    var a = new List<dynamic>();
    a.Add(23);

    // arrange
    var dataService = new Mock<IDataServices>();
    dataService.Setup(l => l.GetPvData(It.IsAny<string>(), It.IsAny<DateTime>(), It.IsAny<DateTime>())).Returns(a);
    var controller = new PvValuesController(dataService.Object);

    // act
    var actionResult = controller.Get("groupid", "timestampstart", "timestampend");
    var httpResponseMessage = await actionResult.ExecuteAsync(CancellationToken.None);

    // assert
    Assert.AreEqual(HttpStatusCode.BadRequest, httpResponseMessage.StatusCode);
}
[测试]
公共异步void TestMoq()
{
var a=新列表();
a、 增加(23);
//安排
var dataService=new Mock();
Setup(l=>l.GetPvData(It.IsAny(),It.IsAny(),It.IsAny())。返回(a);
var控制器=新的PvValuesController(dataService.Object);
//表演
var actionResult=controller.Get(“groupid”、“timestampstart”、“timestampend”);
var httpResponseMessage=await actionResult.ExecuteAsync(CancellationToken.None);
//断言
Assert.AreEqual(HttpStatusCode.BadRequest、httpResponseMessage.StatusCode);
}
我在等待热线上遇到一个例外:


System.InvalidOperationException:HttpControllerContext.配置不能为null,如下所示模拟依赖项接口

var service = new Mock<IDataServices>();
然后像往常一样继续服务设置

service.SetUp(l => l.Get()).Returns("Hello World!!!");
最后,使用控制器实例调用控制器方法

ctrlObj.Get("A","B","C");

你必须模仿
IDataServices
而不是Controllerok,你是对的。我试过了,但最初的数据服务是这样创建的:var-dataService=新的数据服务(导入器、消费者、null、null、uhelasticity);我需要很多“真实”对象来模拟itI,但我得到了一个异常:“System.InvalidOperationException:HttpControllerContext.Configuration不能为null”,请提供一些代码。这是不可能的,看看这个-
service.SetUp(l => l.Get()).Returns("Hello World!!!");
ctrlObj.Get("A","B","C");