Макет IConfiguration выдает исключение NullReferenceException в модульном тесте с использованием Moq [дубликат]C#

Место общения программистов C#
Anonymous
Макет IConfiguration выдает исключение NullReferenceException в модульном тесте с использованием Moq [дубликат]

Сообщение Anonymous »

Я обнаружил исключение NullReferenceException в методе SetInterval() моего класса ApiWorker при запуске модульного теста. Ниже приведены соответствующие части моего кода.

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

public ApiWorkerTests()
{
_mockLogger = new Mock();
_mockDbService = new Mock();
_mockApiService = new Mock();
_mockConfig = new Mock();

_mockConfig.Setup(c => c[$"Authentication:CompanyKey"]).Returns("SomeKey");
_mockConfig.Setup(c => c[$"Authentication:VehicleKey"]).Returns("SomeKey");
_mockConfig.Setup(c => c["Interval"]).Returns("00:00:10");
}

[Fact]
public void ApiWorker_Initialization()
{
// Arrange & Act
var worker = new ApiWorker(_mockApiService.Object, _mockLogger.Object, _mockConfig.Object, _mockDbService.Object);

// Assert
Assert.NotNull(worker);
}
А вот ApiWorker:

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

 public ApiWorker(IApiService apiService, ILogger logger, IConfiguration config, IDatabaseService db)
{
_apiService = apiService;
_logger = logger;
_db = db;
_companyKey = config[$"Authentication:CompanyKey"] ?? throw new Exception("Company ID cannot be null");
_vehicleKey = config[$"Authentication:VehicleKey"] ?? throw new Exception("Vehicle ID cannot be null");
_config = config;

SetInterval();
}

private void SetInterval()
{
var intervalString = _config.GetValue("Interval");

// Conversion to DateTime
}

Жесткое кодирование интервальной строки со значением «00:00:10» позволяет пройти тест, но я хочу понять, почему макетная настройка не работает должным образом. Кажется, проблема в настройке макета IConfiguration.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -using-moq

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