Автофиксация Xunit должна выдать ошибку, но не делает этого ⇐ C#
-
Гость
Автофиксация Xunit должна выдать ошибку, но не делает этого
Я пишу модульные тесты для своих сервисов, используя автофиксацию и автоданные. Это испытание.
[Теория] [АвтоМокДанные] общедоступная асинхронная задача GetByIdAsync_WhenInvalidId_ShouldThrowNotFoundException( Mock репозиторийMock, сервис IReviewService) { // Договариваться репозиторийMock.Setup(r => r.GetByIdAsync(It.IsAny())) .ReturnsAsync(значение: ноль); // Действовать var act = () => service.GetByIdAsync(It.IsAny()); ждут действия.Should().ThrowAsync() .WithMessage(ErrorMessages.REVIEW_NOT_FOUND); } И это тестируемый метод службы
public async Task GetByIdAsync(int id) { вар FoundReview = ждут _repository.GetByIdAsync(id); если (foundReview == ноль) { Log.Error("Отзыв с id = {@id} не найден", id); выбросить новое исключение NotFoundException(ErrorMessages.REVIEW_NOT_FOUND); } return _mapper.Map(foundReview); } Как вы можете видеть, я настраиваю репозиторий, используемый в службе, для возврата значения null, если передается какое-либо целое число, чтобы я мог проверить, что служба правильно выдает мое пользовательское исключение с моим постоянным сообщением об ошибке. Затем я создаю делегат своего метода и проверяю то, что мне нужно. Но тест завершается неудачно с сообщением:
Сообщение: Ожидалось, что будет создано , но исключение не было создано. Трассировки стека: XUnit2TestFramework.Throw (строковое сообщение) TestFrameworkProvider.Throw (строковое сообщение) DefaultAssertionStrategy.HandleFailure (строковое сообщение) AssertionScope.FailWith(Func`1 errorReasonFunc) AssertionScope.FailWith(Func`1 errorReasonFunc) AssertionScope.FailWith(строковое сообщение) DelegateAssertionsBase`2.ThrowInternal[TException](исключение исключения, строка, потому что, объект[] потому чтоArgs) AsyncFunctionAssertions`2.ThrowAsync[TException](String потому что, Object[] потому чтоArgs) ExceptionAssertionsExtensions.WithMessage[TException](задача 1, ожидаемая строкаWildcardPattern, строка потому что, объект[] потому чтоArgs) ReviewServiceTests.GetByIdAsync_WhenInvalidId_ShouldThrowNotFoundException (репозиторий Mock`1Mock, служба IReviewService) line 59 --- Конец трассировки стека из предыдущего местоположения --- Я проверил вручную, и метод работает так, как ожидалось, поэтому я думаю, что проблема связана с настройками автоисправления, но пока не могу точно понять. Вот AutoMoqDataAttribute на случай, если это поможет
публичный класс AutoMoqDataAttribute: AutoDataAttribute { общедоступный AutoMoqDataAttribute(): база (CreateFixture) { } частный статический IFixture CreateFixture() { вар приспособление = новое приспособление (); приспособление.Customize(новый AutoMoqCustomization {ConfigureMembers = true}); возвратное приспособление; } }
Я пишу модульные тесты для своих сервисов, используя автофиксацию и автоданные. Это испытание.
[Теория] [АвтоМокДанные] общедоступная асинхронная задача GetByIdAsync_WhenInvalidId_ShouldThrowNotFoundException( Mock репозиторийMock, сервис IReviewService) { // Договариваться репозиторийMock.Setup(r => r.GetByIdAsync(It.IsAny())) .ReturnsAsync(значение: ноль); // Действовать var act = () => service.GetByIdAsync(It.IsAny()); ждут действия.Should().ThrowAsync() .WithMessage(ErrorMessages.REVIEW_NOT_FOUND); } И это тестируемый метод службы
public async Task GetByIdAsync(int id) { вар FoundReview = ждут _repository.GetByIdAsync(id); если (foundReview == ноль) { Log.Error("Отзыв с id = {@id} не найден", id); выбросить новое исключение NotFoundException(ErrorMessages.REVIEW_NOT_FOUND); } return _mapper.Map(foundReview); } Как вы можете видеть, я настраиваю репозиторий, используемый в службе, для возврата значения null, если передается какое-либо целое число, чтобы я мог проверить, что служба правильно выдает мое пользовательское исключение с моим постоянным сообщением об ошибке. Затем я создаю делегат своего метода и проверяю то, что мне нужно. Но тест завершается неудачно с сообщением:
Сообщение: Ожидалось, что будет создано , но исключение не было создано. Трассировки стека: XUnit2TestFramework.Throw (строковое сообщение) TestFrameworkProvider.Throw (строковое сообщение) DefaultAssertionStrategy.HandleFailure (строковое сообщение) AssertionScope.FailWith(Func`1 errorReasonFunc) AssertionScope.FailWith(Func`1 errorReasonFunc) AssertionScope.FailWith(строковое сообщение) DelegateAssertionsBase`2.ThrowInternal[TException](исключение исключения, строка, потому что, объект[] потому чтоArgs) AsyncFunctionAssertions`2.ThrowAsync[TException](String потому что, Object[] потому чтоArgs) ExceptionAssertionsExtensions.WithMessage[TException](задача 1, ожидаемая строкаWildcardPattern, строка потому что, объект[] потому чтоArgs) ReviewServiceTests.GetByIdAsync_WhenInvalidId_ShouldThrowNotFoundException (репозиторий Mock`1Mock, служба IReviewService) line 59 --- Конец трассировки стека из предыдущего местоположения --- Я проверил вручную, и метод работает так, как ожидалось, поэтому я думаю, что проблема связана с настройками автоисправления, но пока не могу точно понять. Вот AutoMoqDataAttribute на случай, если это поможет
публичный класс AutoMoqDataAttribute: AutoDataAttribute { общедоступный AutoMoqDataAttribute(): база (CreateFixture) { } частный статический IFixture CreateFixture() { вар приспособление = новое приспособление (); приспособление.Customize(новый AutoMoqCustomization {ConfigureMembers = true}); возвратное приспособление; } }
Мобильная версия