C# net core 2.0 xunit控制器,使用Mock进行依赖项注入,该控制器为空
我正在做一个C# net core 2.0 xunit控制器,使用Mock进行依赖项注入,该控制器为空,c#,.net-core,dependency-injection,moq,xunit,C#,.net Core,Dependency Injection,Moq,Xunit,我正在做一个netcore2.0restapi应用程序 我正在对接口IContactBiz和类ContactBiz使用依赖项注入 IContactBiz的定义如下 public interface IContactBiz { ReturnModel Add(List<ContactEntity> lstContactEntity, ContactEntity contact); } public class ContactController : Controller {
netcore2.0restapi
应用程序
我正在对接口IContactBiz
和类ContactBiz
使用依赖项注入
IContactBiz的定义如下
public interface IContactBiz
{
ReturnModel Add(List<ContactEntity> lstContactEntity, ContactEntity contact);
}
public class ContactController : Controller
{
private readonly IContactBiz _contactBiz;
public ContactController(IContactBiz contactbiz)
{
_contactBiz = contactbiz;
}
//...
我在控制器上有一个Post方法,在这里我从ContactBiz
类调用Add()方法
[HttpPost]
public IActionResult Post([FromBody]ContactModel contact)
{
ReturnModel errorModel = new ReturnModel();
//...
errorModel = _contactBiz.Add(lstContactEntity, contactEntity);
//...
}
当我和邮递员一起运行时,它运行得很好。。我从ContactBiz.cs访问Add()方法并检索数据
但是我有一个xUnit
项目来测试它,我想使用Moq
我有
public class ContactControllerTest
{
ContactController _controller;
public ContactControllerTest()
{
Mock<IContactBiz> mockRepo = new Mock<IContactBiz>();
_controller = new ContactController(contactbiz: mockRepo.Object);
}
[Fact]
public void InsertContact()
{
ContactModel cm = new ContactModel()
{
Address = "data",
City = "data",
Company = "data",
Email = "data",
Name = "data",
PhonePersonal = "data",
PhoneWork = "data",
State = "data",
BirthDate = DateTime.Today.AddYears(-30)
};
var actionResult = _controller.Post(cm);
}
}
公共类ContactControllerTest
{
接触器控制器(u控制器),;
公共联系人控制器测试()
{
Mock mockRepo=新Mock();
_控制器=新的ContactController(contactbiz:mockRepo.Object);
}
[事实]
public void InsertContact()
{
ContactModel cm=新的ContactModel()
{
Address=“data”,
City=“data”,
Company=“data”,
Email=“data”,
Name=“data”,
PhonePersonal=“数据”,
PhoneWork=“数据”,
State=“data”,
生日=DateTime.Today.AddYears(-30)
};
var actionResult=_controller.Post(cm);
}
}
我在调试模式下运行它
当我到达终点时
errorModel=\u contactBiz.Add(lstContactEntity,contactEntity)。。是空的
ContactBiz类中的Add()方法,它从未被调用
我想我没有设置将哪个类映射到contactBiz
接口
我在startup.cs中的行
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IContactBiz, ContactBiz>();
}
services.AddSingleton()代码>
无法访问Add()方法por ContactBiz类,并且errorModel
为空
我认为问题在于我没有分配services.AddSingleton()代码>最小起订量
还有别的问题吗
谢谢将模拟配置为在调用时按预期运行
ReturnModel returnModel = new ReturnModel() {
Result = true,
};
Mock<IContactBiz> mockRepo = new Mock<IContactBiz>();
mockRepo
.Setup(_ => _.Add(It.IsAny<List<ContactEntity>>(), It.IsAny<ContactEntity>()))
.Return(returnModel);
_controller = new ContactController(contactbiz: mockRepo.Object);
ReturnModel ReturnModel=new ReturnModel(){
结果=真,
};
Mock mockRepo=新Mock();
莫克雷波
.Setup(=>\u0.Add(It.IsAny(),It.IsAny()))
.退货(退货模式);
_控制器=新的ContactController(contactbiz:mockRepo.Object);
否则它将返回返回类型的默认值当前状态下的问题不完整,因此不清楚。如果没有一个能澄清你的具体问题或额外细节来强调到底做了什么,那么就很难重现问题,从而更好地理解实际问题。Nkosi,很抱歉我的解释。。。我只是安排一些评论。。谢谢你需要出示被测对象。大部分细节都被遗漏了。添加的注释没有提供更多关于代码作用的细节。Nkosi,我只是添加了我正在执行的所有步骤,我的控制器和测试单元。。。希望有帮助,谢谢。
ReturnModel returnModel = new ReturnModel() {
Result = true,
};
Mock<IContactBiz> mockRepo = new Mock<IContactBiz>();
mockRepo
.Setup(_ => _.Add(It.IsAny<List<ContactEntity>>(), It.IsAny<ContactEntity>()))
.Return(returnModel);
_controller = new ContactController(contactbiz: mockRepo.Object);