Moq C#,我怎么能嘲笑这个班?
我需要使用Moq框架模拟这个C#WebApi类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; } [
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");