【发布时间】:2020-06-30 00:03:18
【问题描述】:
我正在做一个Net Core 2.0 Rest Api 应用程序。
我正在使用接口IContactBiz 和类ContactBiz 的依赖注入。
IContactBiz 是这样定义的
public interface IContactBiz
{
ReturnModel Add(List<ContactEntity> lstContactEntity, ContactEntity contact);
}
我的 ContactBiz 类
public class ContactBiz: IContactBiz
{
public ReturnModel Add(List<ContactEntity> lstContactEntity, ContactEntity contact)
{
contact.ID = Guid.NewGuid().ToString();
lstContactEntity.Add(contact);
return new ReturnModel()
{
Result = true,
};
}
}
在startup.cs中设置
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IContactBiz, ContactBiz>();
}
我有一个 ContactController,定义如下
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);
//...
}
当我使用 Postman 运行它时,它运行良好。我从 ContactBiz.cs 到达 Add() 方法并检索数据。
但我有一个xUnit 项目来测试它,我想使用起订量..
我有
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);
}
}
我在调试模式下运行它...
当我到达终点线时
errorModel = _contactBiz.Add(lstContactEntity, contactEntity); 在 Post() 方法中.. 为空...
ContactBiz 类中的 Add() 方法永远不会被调用
我想我缺少设置哪个类映射到_contactBiz 接口
我在 startup.cs 中的行
services.AddSingleton<IContactBiz, ContactBiz>();
无权访问 ContactBiz 类的 Add() 方法,并且errorModel 为空。
我认为问题在于我没有在 Moq 中分配services.AddSingleton<IContactBiz, ContactBiz>();?
还有其他问题吗?
谢谢
【问题讨论】:
-
当前状态下的问题不完整,因此不清楚。如果没有 minimal reproducible example 澄清您的具体问题或其他详细信息以突出确切已完成的工作,则很难重现问题以更好地理解问题是实际问题。
-
Nkosi,对不起我的解释...我只是安排了一些 cmets.. 谢谢
-
你需要展示被测对象。大部分细节都被遗漏了。添加的 cmets 没有提供有关代码功能的更多详细信息。
-
Nkosi,我刚刚添加了我正在做的所有步骤,我的控制器和测试单元......希望它有所帮助,谢谢。
标签: c# .net-core dependency-injection moq xunit