Модульное тестирование фабрики с зависимостямиC#

Место общения программистов C#
Ответить
Anonymous
 Модульное тестирование фабрики с зависимостями

Сообщение Anonymous »

Я реализую модульные тесты и пытаюсь расширить охват нашей кодовой базы.

У меня ограниченный опыт модульного тестирования, поэтому большую часть его изучаю с нуля.
Проект это рабочая служба .NET 8. Я использую xUnit, FakeItEasy и FluentAssertions.
У меня есть объект Factory, который создает конкретные классы на основе переданной строки. Проблема в том, что что для его получения используется метод GetRequiredService, но это не удается, поскольку он пытается использовать поддельные объекты для поставщика услуг. Затем я попытался создать экземпляр поставщика услуг, но затем мне нужно было создать экземпляр того или иного класса, и он превратился в вместо поддельных классов. Затем я пытался добавить в построитель сервисов каждый тип, но затем, когда он выдал ошибку, потому что он не мог использовать объект dbcontext в моем объекте репо, я знал, что сошел с рельсов.
Помогите!
Код модульного теста:

Код: Выделить всё

   private readonly IWatchdogWorkerFactory _workerFactory;
private readonly IServiceProvider _serviceProvider;
private readonly ILogger _logger;

public WatchdogWorkerFactoryTests()
{
_logger = A.Fake();
_serviceProvider = A.Fake();

//SUT - System Under Test
_workerFactory = new WatchdogWorkerFactory(_serviceProvider, _logger);
}

[Fact]
public void WatchdogWorkerFactory_CreateDataLoadWorker()
{
//Triple A
var dataLoadWorker = A.Fake();

//Arrange - go get variables, classes, functions needed to run test
var services = new ServiceCollection();
// Add IAppState, ILoggerAdapater, and other services
services.AddSingleton();
services.AddSingleton();

// Create the service provider instance
var serviceProvider = services.BuildServiceProvider();

//Act - do some operation
var result = _workerFactory.CreateWorker("dataload");

//Assert - verify result
result.Should().BeSameAs(dataLoadWorker);
}
.....
Я думаю, что утверждение, вероятно, должно проверять тип, поэтому открыт для предложений.
Ниже находится объект фабрики

Код: Выделить всё

    private readonly IServiceProvider _serviceProvider;
private readonly ILogger _logger;

[ExcludeFromCodeCoverage]
public WatchdogWorkerFactory(IServiceProvider serviceProvider, ILogger logger)
{
_serviceProvider = serviceProvider;
_logger = logger;
}

public IWatchdogWorker CreateWorker(string watchdogType)
{
switch (watchdogType.ToLower())
{
case "dataload":
return _serviceProvider.GetRequiredService();
case "domoworkbench":
return _serviceProvider.GetRequiredService();
default:
throw new ArgumentException($"Unknown watchdog type: {watchdogType}");
}
}
}
Это ошибка, если я просто оставлю фейки, а что нет:
[img]https://i.sstatic.net /emMTuavI.png[/img]


Подробнее здесь: https://stackoverflow.com/questions/791 ... pendencies
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»