AutoFixture не может создать экземпляр интерфейса после добавления атрибута AutoData и перемещения макетов в параметры м ⇐ C#
AutoFixture не может создать экземпляр интерфейса после добавления атрибута AutoData и перемещения макетов в параметры м
Я учусь использовать AutoFixture и пытаюсь улучшить свои модульные тесты. Я хочу изменить один из моих тестов, чтобы использовать атрибут AutoData и получать макеты из параметров метода.
Вот мой модульный тест (он сейчас проходит):
[Теория, AutoData] общедоступная асинхронная задача UpdateMetadata_PassesAllMessagesToSummaryGenerator (история ConversationHistory) { // Договариваться var разговораStorage = _fixture.Freeze(); var summaryGeneratorMock = _fixture.Freeze(); разговорStorage.Setup(s => s.GetHistory(It.IsAny())).Returns(history); // Действовать _sut = _fixture.Create(); ждут _sut.UpdateMetadata(Guid.NewGuid()); // Утверждать Assert.That(history.Messages.Count, Is.GreaterThan(0)); foreach (сообщение var в истории.Сообщения) { summaryGeneratorMock.Verify(x => x.GenerateSummariesFor( It.Is(s => s.Contains(message.Text)) )); } } Вот тот же модульный тест, но после изменений:
[Теория, AutoData] общедоступная асинхронная задача UpdateMetadata_PassesAllMessagesToSummaryGenerator2( [Заморожено] Mock talkStorage, [Frozen] Mock summaryGeneratorMock, ConversationMetadataGenerator sut, История беседы) { // Договариваться разговорStorage.Setup(s => s.GetHistory(It.IsAny())).Returns(history); // Действовать дождитесь sut.UpdateMetadata(Guid.NewGuid()); // Утверждать Assert.That(history.Messages.Count, Is.GreaterThan(0)); foreach (сообщение var в истории.Сообщения) { summaryGeneratorMock.Verify(x => x.GenerateSummariesFor( It.Is(s => s.Contains(message.Text)) )); } } Результат модульного теста из второго примера:
AutoFixture.ObjectCreationExceptionWithPath: AutoFixture не удалось создать экземпляр из LlmConversation.Core.Storage.IConversationStorage, поскольку это интерфейс. Не существует единственного и наиболее подходящего способа создания объекта, реализующего интерфейс, но вы можете помочь AutoFixture разобраться в этом.
Нет проблем создать экземпляр IConversationStorage в первом модульном тесте, и в то же время невозможно создать его во втором тесте. Почему?
Я учусь использовать AutoFixture и пытаюсь улучшить свои модульные тесты. Я хочу изменить один из моих тестов, чтобы использовать атрибут AutoData и получать макеты из параметров метода.
Вот мой модульный тест (он сейчас проходит):
[Теория, AutoData] общедоступная асинхронная задача UpdateMetadata_PassesAllMessagesToSummaryGenerator (история ConversationHistory) { // Договариваться var разговораStorage = _fixture.Freeze(); var summaryGeneratorMock = _fixture.Freeze(); разговорStorage.Setup(s => s.GetHistory(It.IsAny())).Returns(history); // Действовать _sut = _fixture.Create(); ждут _sut.UpdateMetadata(Guid.NewGuid()); // Утверждать Assert.That(history.Messages.Count, Is.GreaterThan(0)); foreach (сообщение var в истории.Сообщения) { summaryGeneratorMock.Verify(x => x.GenerateSummariesFor( It.Is(s => s.Contains(message.Text)) )); } } Вот тот же модульный тест, но после изменений:
[Теория, AutoData] общедоступная асинхронная задача UpdateMetadata_PassesAllMessagesToSummaryGenerator2( [Заморожено] Mock talkStorage, [Frozen] Mock summaryGeneratorMock, ConversationMetadataGenerator sut, История беседы) { // Договариваться разговорStorage.Setup(s => s.GetHistory(It.IsAny())).Returns(history); // Действовать дождитесь sut.UpdateMetadata(Guid.NewGuid()); // Утверждать Assert.That(history.Messages.Count, Is.GreaterThan(0)); foreach (сообщение var в истории.Сообщения) { summaryGeneratorMock.Verify(x => x.GenerateSummariesFor( It.Is(s => s.Contains(message.Text)) )); } } Результат модульного теста из второго примера:
AutoFixture.ObjectCreationExceptionWithPath: AutoFixture не удалось создать экземпляр из LlmConversation.Core.Storage.IConversationStorage, поскольку это интерфейс. Не существует единственного и наиболее подходящего способа создания объекта, реализующего интерфейс, но вы можете помочь AutoFixture разобраться в этом.
Нет проблем создать экземпляр IConversationStorage в первом модульном тесте, и в то же время невозможно создать его во втором тесте. Почему?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как использовать только конструктор перемещения и оператор присваивания перемещения
Anonymous » » в форуме C++ - 0 Ответы
- 54 Просмотры
-
Последнее сообщение Anonymous
-