Я делаю заявление 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 на моем контроллере, где я вызываю Add () метод из ContactBiz
класс
[HttpPost]
public IActionResult Post([FromBody]ContactModel contact)
{
ReturnModel errorModel = new ReturnModel();
//...
errorModel = _contactBiz.Add(lstContactEntity, contactEntity);
//...
}
Когда я запускаю его с Почтальоном, он работает нормально .. Я достигаю метода Add () из ContactBiz.cs и извлекаю данные.
Но у меня есть 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);
}
}
Я запускаю его в режиме отладки ...
Когда Я достигаю строки errorModel = _contactBiz.Add(lstContactEntity, contactEntity);
в методе Post () .. является нулевым ...
Метод Add () из класса ContactBiz никогда не вызывается
Я думаю, что мне не хватает, чтобы установить какой класс сопоставлен с _contactBiz
interface
строкой, которую я имею в startup.cs
services.AddSingleton<IContactBiz, ContactBiz>();
Нет доступа к методу Add () для класса ContactBiz и errorModel
это н Улл.
Мне кажется, проблема в том, что я не назначил services.AddSingleton<IContactBiz, ContactBiz>();
в Moq?
Есть ли другая проблема?
Спасибо