Как создать тестовый дубль для объекта DataLakeDirectoryClient библиотеки Azure.Storage.Files.DataLake C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как создать тестовый дубль для объекта DataLakeDirectoryClient библиотеки Azure.Storage.Files.DataLake C#?

Сообщение Anonymous »

Мой код получает доступ к файлу или загружает его из Azure DataLake Storage Gen2. Этот файл размещается вышестоящей системой нашего приложения. Файлы организованы в иерархию каталогов.
Типичная иерархия файла будет такой:

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

sample-container/process_Id_12/task_id_34/year2024/month7/day10/file.csv
Функциональность моего тестируемого объекта (

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

GetFiles 
метод) переходит в правильный каталог, идентифицирует правильный файл по шаблону и, наконец, получает его в виде потока.

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

using Azure.Storage.Files.DataLake;

public class DataLakeService
{
//this object is pointing to the directory "sample-container/process_Id_12/"
private DataLakeDirectoryClient downloadClient;

private readonly string taskid = "task_id_34";
public DataLakeService(DataLakeDirectoryClient dataLakeDirectoryClient)
{
this.downloadClient = dataLakeDirectoryClient;
}

public IAsyncEnumerable GetFiles(DateTime processingDate)
{
DataLakeDirectoryClient dir = downloadClient.GetSubDirectoryClient(taskid)
.GetSubDirectoryClient($"year{processingDate.Year}")
.GetSubDirectoryClient($"month{processingDate.Month}");

if(!dir.Exists()){
return AsyncEnumerable.Empty();
}
var pathItems = dir.GetPathsAsync(true);
await foreach(var pathItem in pathItems)
{
string absoluteFullPathToFile = pathItem.Name; //e.g., sample-container/process_Id_12/task_id_34/year2024/month7/day10/file.csv
string fileName = System.IO.Path.GetFileName(absoluteFullPathToFile);
if(!IsRegexPatternMatch(fileName))
{
continue;
}
var continer = downloadClient.GetParentFileSystemClient();
string pathToDirectory = System.IO.Path.GetDirectoryName(absoluteFullPathToFile);
var directoryClient = container.GetDirectoryClient(pathToDirectory);
var fileClient = directoryClient.GetFileClient(fileName);
yield return await fileClient.OpenReadAsync();
}

}
}
Мое приложение dotnet 6 использует платформы NUnit 3.12.0, Moq 4.14.5. Чтобы протестировать метод GetFiles, я имитировал зависимость **DataLakeDirectoryClient ** с помощью Moq. Но такое ощущение, что я обманываю себя, используя фиктивные настройки для вызовов методов DataLakeDirectoryClient.
Я застрял на настройке защищенного метода базы класс DataLakeDirectoryClient.
Класс DataLakeDirectoryClient является производным от DataLakePathClient
Этот конкретный защищенный метод базового класса вызывается через метод расширения базового класса (определение метода расширения GetParentFileSystemClient)
Я попробовал, как показано ниже:

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

using Nunit.Framework;
using Moq;
public class DataLakeService
{
public async Task GetFiles_WhenSingleFileInStorage_ThenReturnAStream()
{
//Arrange
var mockDirectoryClient = new Mock();
mockDirectoryClient
.Setup(dc => dc.GetSubDirectoryClient(It.IsAny()))
.Returns(mockDirectoryClient.Object);
mockDirectoryClient
.Setup(dc => dc.Exists(default(CancelationToken)))
.Returns(Response.FromValue(true, Mock.Of()));

mockDirectoryClient
.Setup(dc => dc.GetPathsAsync(true, false, default))
.Returns(() => {
var pathItem1 = DataLakeModelFactory
.PathItem("sample-container/process_Id_12/task_id_34/year2024/month7/day10/file.csv",
false, new DateTime(2024, 7, 10), ETag.All, 256, "", "", "");
var pathItem2 = DataLakeModelFactory
.PathItem("sample-container/process_Id_12/task_id_34/year2024/month7/day10/file.txt",
false, new DateTime(2024, 7, 10), ETag.All, 256, "", "", "");
var page1 = Page
.FromValues(values: new[] { pathItem1, pathItem2 },
continuationToken: null, response: Mock.Of());

return AsyncPageable.FromPages(new[] { page1 });

});
var mockFileSystemClient = new Mock();
mockFileSystemClient.Setup(fsc => fsc.GetDirectoryClient(It.IsAny()))
.Returns(mockDirectoryClient.Object);

var mockFileClient = new Mock();
Stream stream = BinaryData.FromString("This is a line.\n This is the second line\n").ToStream();
mockFileClient.Setup(fc => fc.OpenReadAsync(0, default, default, default))
.Returns(Task.FromResult(stream));
mockDirectoryClient
.Setup(dc => dc.GetFileClient(It.IsAny()))
.Returns(mockFileClient.Object);

// DataLakeDirectoryClient's GetParentFileSystemClient method get invoked in the SUT
// To set up that method, I have tried both below

mockDirectoryClient.Protected()
.Setup("GetParentDataLakeFileSystemClientCore")
.Returns(mockFileSystemClient.Object);

//Error for above is "No protected method DataLakeDirectoryClient.GetParentDataLakeFileSystemClientCore found whose signature is compatible with the provided arguments ()."

mockDirectoryClient
.Setup(dc => dc.GetParentFileSystemClient())
.Returns(mockFileSystemClient.Object);
// Error: "Unsupported expression : dc => dc.GetParentFileSystemClient()
// Extension meethods(here: SpecializedDataLakeExtensions.GetParentFileSystemClient) May not be used in setup / verification expression "

//Act
//Assert
}
}

Итак, как настроить вызов этого метода расширения или защищенного члена базового класса?


Подробнее здесь: https://stackoverflow.com/questions/787 ... re-storage
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Версии Netty конфликтуют с azure-identity, azure-storage-file-datalake java sdk.
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Версии Netty конфликтуют с azure-identity, azure-storage-file-datalake java sdk.
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Версии Netty конфликтуют с azure-identity, azure-storage-file-datalake java sdk.
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Версии Netty конфликтуют с azure-identity, azure-storage-file-datalake java sdk.
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Версии Netty конфликтуют с azure-identity, azure-storage-file-datalake java sdk.
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

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