Не может внедрить класс во взаимодействие в тесте - PullRequest
0 голосов
/ 29 октября 2018

У меня есть простой HomeController, в котором происходит DI. Когда я запускаю приложение и отлаживаю конструктор HomeController, SomeService не равен нулю, что означает, что все работает.

private ISomeService SomeService;

public HomeController(ISomeService SomeService)
{
   this.SomeService = SomeService;
}

Тогда у меня есть тест, где инъекция не работает. Unity, который я использую для DI, не вводит SomeService в ISomeService. В отладке это null. Я упоминаю, что в Unity.config все настроено правильно.

[TestFixture]
public class HomeControllerTests
{
    private ISomeService SomeService;
    private HomeController controller;

    [SetUp]
    public void SetUp()
    {
        controller = new HomeController(SomeService);
    }
}

1 Ответ

0 голосов
/ 29 октября 2018

В вашем коде вы передаете

private ISomeService SomeService;

в HomeController конструктор

controller = new HomeController(SomeService);

Это будет null , потому что вы нигде не инициализировали SomeService в коде

Что бы вы хотели проверить? HomeController или SomeService?

Если вы хотите провести модульное тестирование HomeController, вы должны высмеивать ISomeService, чтобы HomeController не зависело от обслуживания.

Я предлагаю использовать Moq framework для проверки ISomeService и тестирования HomeController в изоляции.

Moq Quickstart

Самым простым способом вы можете инициализировать ISomeService, например:

private ISomeService SomeService = Mock.Of<ISomeService>();
...