Moq C#,我如何模拟这个 class?
Moq C#, How can I mock this class?
我需要使用 Moq 框架模拟此 C# WebApi class
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
,因此 Get()
函数将始终 return 错误的请求代码。
原行是:
var controller = new PvValuesController(dataService);
其中dataService是IDataService的具体实例,是一个复杂的对象
我怎样才能有效地模拟这样的 class?
编辑:
我的新测试代码:
[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 不能为空
如下所示模拟你的依赖接口
var service = new Mock<IDataServices>();
将它注入你的控制器
var ctrlObj = new PvValuesController(service.Object);
然后像往常一样继续设置服务
service.SetUp(l => l.Get()).Returns("Hello World!!!");
最后使用控制器实例调用您的控制器方法
ctrlObj.Get("A","B","C");
我需要使用 Moq 框架模拟此 C# WebApi class
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
,因此 Get()
函数将始终 return 错误的请求代码。
原行是:
var controller = new PvValuesController(dataService);
其中dataService是IDataService的具体实例,是一个复杂的对象
我怎样才能有效地模拟这样的 class?
编辑:
我的新测试代码:
[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 不能为空
如下所示模拟你的依赖接口
var service = new Mock<IDataServices>();
将它注入你的控制器
var ctrlObj = new PvValuesController(service.Object);
然后像往常一样继续设置服务
service.SetUp(l => l.Get()).Returns("Hello World!!!");
最后使用控制器实例调用您的控制器方法
ctrlObj.Get("A","B","C");