Azure CloudFile DownloadToStream - метод пересмешивания с Callback не работает - PullRequest
0 голосов
/ 29 апреля 2020

Это код для чтения файла из azure хранилища файлов и обработки данных. Я использую новейшие пакеты для хранения файлов.

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("FileStorageConnectionString");
CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
CloudFileShare cloudShare = fileClient.GetShareReference("FileShareName");

    var cloudFile = this.cloudShare.GetRootDirectoryReference().GetFileReference("file.txt");    
    var memoryStream = new MemoryStream();

        cloudFile.DownloadToStream(memoryStream);
        memoryStream.Position = 0;

        var data = ProcessData(new StreamReader(memoryStream));
        memoryStream.Dispose();

Для модульного тестирования этой части я пытаюсь смоделировать метод DownloadToStream, как этот, в модульном тесте.

var stream = new MemoryStream();

        var fileStream = File.OpenRead("file.txt");
        fileStream.CopyTo(stream);
        stream.Position = 0;
       var cloudFile = new Mock<CloudFile>(fakeStorageUri, fakeStorageCredentials);
        cloudFile.Setup(x => x.DownloadToStream(It.IsAny<Stream>(), null, null, null))
            .Callback((Stream target) =>
            {
                stream.CopyTo(target);
                target.Position = 0;
            });

, но я получаю это исключение при выполнении модульного теста. Что я здесь не так делаю?

 Invalid callback. Setup on method with parameters (Stream,AccessCondition,FileRequestOptions,OperationContext)
 cannot invoke callback with parameters (Stream).

1 Ответ

0 голосов
/ 29 апреля 2020

Как отметил Павел в комментариях, мне не хватает других параметров. Я предполагал, что нет необходимости в дополнительных параметрах. Это решило проблему.

.Callback((Stream target, AccessCondition accessCondition, FileRequestOptions options, OperationContext operationContext) =>
            {
                stream.CopyTo(target);
                target.Position = 0;
            });
...