Чистое ядро ​​xunit не входит в метод с использованием внедрения зависимостей - PullRequest
0 голосов
/ 19 марта 2020

Я делаю net core rest api приложение, в котором я хочу использовать xunit для его проверки.

У меня есть интерфейс с именем IContact с простым методом и класс Concrete с именем Contact

public interface IContact
{
   int Get();
}

public class Contact: IContact
{
  public int Get()
  {
     return 10;
  }
}

В файле startup.cs я определил это ...

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IContact, Contact>();
}

Я использую контроллер значений по умолчанию, как это

public class ValuesController : ControllerBase
{
   private IContact _contact;
   public ValuesController(IContact contact)
   {
      _contact = contact;
   }
   [HttpGet]
   public void Get()
   {
     int aa = _contact.Get();
   }
}

У меня есть проект xunit, где я использую Moq для вызова метода Get () ()

public class UnitTest1
{
   ValuesController _controller;
   public UnitTest1()
   {
       Mock<IContact> mockRepo = new Mock<IContact>();
       _controller = new ValuesController(mockRepo.Object);
    }
    [Fact]
    public void Test1()
    {
       _controller.Get();
    }
}

Я запускаю этот тест в режиме отладки и при достижении строки

int aa = _contact.Get();

У меня проблема в том, что он не вступает в Get() метод из Contact класса. Возвращает 0;

Чего мне не хватает?

Где я могу установить интерфейс IContact должен вызывать класс Contact, как я определил в startup.cs?

1 Ответ

1 голос
/ 19 марта 2020

У меня проблема в том, что он не входит в метод Get () из класса Contact. Возвращает 0

. Вам нужно настроить макет, чтобы при вызове он вел себя так, как ожидалось.

Потому что, если вы этого не сделаете, имитатор не будет знать, что делать при вызове.

Mock<IContact> mockRepo = new Mock<IContact>();
//setup the mock to behave as exptected.
mockRepo.Setup(_ => _.Get()).Returns(10); 
//pass mocked instance to subject under test
_controller = new ValuesController(mockRepo.Object); 

//...exercise subject under test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...