Протестируйте контроллер, используя Autofixture, которая принимает IOptions <T>в качестве параметра конструктора - PullRequest
0 голосов
/ 24 сентября 2018

Класс контроллера:

private readonly DbSettings _docDbSettings;

public CoursesController(IOptions<DbSettings> docDbSettings)
{
    if (docDbSettings == null) throw new ArgumentNullException(nameof(docDbSettings));
    _docDbSettings = docDbSettings.Value;
}

Класс испытаний контроллера:

public class CoursesControllerTests
{
    private readonly IFixture _fixture;
    private readonly CoursesController _coursesController;
    private readonly DbSettings _docDbSettings;

    public CoursesControllerTests()
    {
        _fixture = new Fixture().Customize(new AutoFakeItEasyCustomization());

        // Need help here.
        _docDbSettings = _fixture.Create<IOptions<DbSettings>>();       
    }
}

Ошибка:

Cannot implicitly convert type 'Microsoft.Extensions.Options.IOptions<Infrastructure.DbSettings>' to 'Infrastructure.DbSettings'

Любые подсказки!

Спасибо ввперед.

1 Ответ

0 голосов
/ 25 сентября 2018

Кажется, вы пытаетесь присвоить объект типа IOptions<DbSettings>, возвращаемый _fixture.Create<IOptions<DbSettings>>(), переменной типа DbSettings, когда эти типы не совместимы .

Вы можете изменить тип _docDbSettings на IOptions<DbSettings> или создать объект DbSettings с помощью AutoFixture, сказав:

_docDbSettings = _fixture.Create<DbSettings>();

Кстати, хорошо знать, что AutoFixture может работать как контейнер для автоматической проверки , что означает, что вы можете попросить его создать экземпляр вашего CourseController, а AutoFixture обязательно предоставит аргументы для всех зависимостей конструктора, в данном случае IOptions<DbSettings>:

var systemUnderTest = _fixture.Create<CourseController>();

Подробнее о том, как использовать этот шаблон с AutoFixture, вы можете прочитать в этой статье , написанной Mark Seemann.

...