gpt4 book ai didi

c# - Moq C#,我怎样才能模拟这个类?

转载 作者:行者123 更新时间:2023-11-28 20:41:11 25 4
gpt4 key购买 nike

我需要使用 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);
}
}

问题是,如果我这样 mock 它:

var controllerMock = new Mock<PvValuesController>();

我没有将任何 DataService 传递给它,因此 Get() 函数将始终返回错误的请求代码。

原行是:

var controller = new PvValuesController(dataService);

其中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);
}

我在等待线上得到一个异常:

System.InvalidOperationException: HttpControllerContext.Configuration 不能为空

最佳答案

如下所示模拟你的依赖接口(interface)

var service = new Mock<IDataServices>();

将它注入(inject)你的 Controller

var ctrlObj = new PvValuesController(service.Object);

然后像往常一样继续设置服务

service.SetUp(l => l.Get()).Returns("Hello World!!!");

最后使用 Controller 实例调用你的 Controller 方法

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

关于c# - Moq C#,我怎样才能模拟这个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31962499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com