Как я могу использовать NSubstitute, чтобы высмеивать ILogger на конструкторе - PullRequest
0 голосов
/ 10 января 2019

У меня есть следующий конкретный конструктор контроллера:

public class AuthenticationController : ControllerBase
{
    private readonly IUserRepository<User> _userRepository;
    private readonly ILogger<AuthenticationController> _logger;
    private readonly IConfiguration _config;


    public AuthenticationController(IUserRepository<User> userRepository, ILogger<AuthenticationController> logger, IConfiguration config)
    {
        _userRepository = userRepository;
        _logger = logger;
        _config = config;
    }

Я пытаюсь издеваться над конструктором, но, похоже, у меня проблемы с ILogger.

 var userRepository = Substitute.For<IUserRepository<User>>();
 var config = Substitute.For<IConfiguration>();
 var logger = Substitute.For<ILogger>();

 var controller = new AuthenticationController(userRepository, logger, config);

С помощью логгера я попробовал следующее, но все продолжают оставлять «красную линию» под Конструктором: например. на линии

var controller = new AuthenticationController(userRepository, logger, config);

AuthenticationController имеет красную линию независимо от того, что я пытаюсь.

Если я объявлю регистратор в форме: var logger = Substitute.For<ILogger<AuthenticationController>>(); вся правая сторона = также красные линии.

var logger = Substitute.For<ILogger<AuthenticationController>>();

тогда я попробовал:

var auth = Substitute.For<AuthenticationController>();
var logger = Substitute.For<ILogger<auth>>();

При наведении курсора на красную линию упоминается, что ссылка на сборку на API выше, чем сборка модульных тестов. Оба проекта нацелены на .Net Core 2.1

Это ошибка, генерируемая из моего тестового проекта:

Сборка «My.Api» с идентификатором «My.Api, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null» использует «Microsoft.AspNetCore.Mvc.Core, версия = 2.1.1.0, Culture = нейтральный, PublicKeyToken = adb9793829ddae60 ', которая имеет более высокую версию, чем указанная сборка' Microsoft.AspNetCore.Mvc.Core 'с идентификатором' Microsoft.AspNetCore.Mvc.Core, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60 '

Мой тестовый проект ссылается на мой проект API. В проекте api есть ссылка на Microsoft.AspNetCore.App (2.1.1) Мой проект модульного тестирования вообще не имеет прямой ссылки на эту библиотеку.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Странно, я создал новый тестовый проект в решении и все еще получил ту же ошибку. Итак, в моем оригинальном тестовом проекте я установил именно через Nuget

Пакет Microsoft.AspNetCore.Mvc.Core (2.1.1)

и моя ошибка исчезла, и она прошла успешно. Я специально не упоминал об этом в своем проекте Api. Я поднял это на тот случай, если другие столкнутся с подобной проблемой.

0 голосов
/ 10 января 2019

Необходимо убедиться, что ваш проект кода и ваш проект модульного тестирования используют одну и ту же версию пакета nuget, содержащего ILogger.

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