Вы сравниваете два отдельных экземпляра в настройке и то, что фактически вызывается в тесте.
Тестируемый метод создает свой собственный экземпляр StorageAccountAttribute
с жестко заданным кодом "AzureWebJobsStorage"
, в то время как тест использует другой экземпляр для выражения установки.Они не будут совпадать при выполнении теста, и, таким образом, макет вернет null как опытный.
Попробуйте ослабить настройку, используя It.IsAny<T>()
- выражение ожидания.
//Arrange
CloudStorageAccount mockedResult = null;
CloudStorageAccount.TryParse("UseDevelopmentStorage=true;", out mockedResult);
var mock = new Mock<IBinder>();
mock
.Setup(x => x.BindAsync<CloudStorageAccount>(It.IsAny<StorageAccountAttribute>(), CancellationToken.None))
.ReturnsAsync(mockedResult);
ILogger logger = Mock.Of<ILogger>();
//Act
var res = await LoadReferenceFromBlobStorage.Run("name", mock.Object, logger);
//Assert
//...
Это позволит
CloudStorageAccount storageAccount = await binder.BindAsync<CloudStorageAccount>(storageAccountAtt, CancellationToken.None);
вести себя, как и ожидалось, при вызове.
Что касается жестко закодированного аргумента StorageAccountAttribute
, вы можете также подумать о рефакторинге, чтобы он мог бытьзаменяется при тестировании, чтобы не было проблем с хранилищем, используемым при тестировании.