Тест XUnit с автофаком

Я перешел по этой ссылке https://github.com/dennisroche/xunit.ioc.autofac чтобы создать XUnit Test с autofac, но я получил ошибку

Запрошенный сервис 'Xunit.Sdk.TestOutputHelper' не был зарегистрирован. Чтобы избежать этого исключения, либо зарегистрируйте компонент для предоставления услуги, проверьте регистрацию службы с помощью IsRegistered(), либо используйте метод ResolveOptional() для разрешения необязательной зависимости. Я добавил ниже код:

        builder.Register(context => new TestOutputHelper())
            .As<ITestOutputHelper>()
            .InstancePerLifetimeScope();

Я что-то пропустил по ссылке выше?

2 ответа

Решение

TL;DR:

Обязательно зарегистрируйте тип TestOutputHelper также как сам при использовании этой библиотеки.

Более длинная версия:

AutofacTestInvoker ( https://github.com/dennisroche/xunit.ioc.autofac/blob/master/src/xunit2.ioc.autofac/AutofacTestInvoker.cs) нужен конкретный класс TestOutputHelper (не ITestOutputHelper!) звонить TestOutputHelper.Initialize(IMessageBus, ITest), который недоступен в интерфейсе, и разрешается через созданный ILifetimeScope, В вашем примере вы регистрируете его как интерфейс, так что для Autofac нет TestOutputHelper, доступного для разрешения вообще.

РЕДАКТИРОВАТЬ: документация была адаптирована. См. https://github.com/dennisroche/xunit.ioc.autofac/pull/9 для получения подробной информации.

Вы регистрируете ITestOutputHelper, а не TestOutputHelper, и кажется, что это требуется некоторым конструктором.

Если вы используете TestOutputHelper в каком-либо тесте, вы должны заменить его на ITestOutputHelper.

Другие вопросы по тегам