Хранилище таблиц Azure c # с шаблоном хранилища и xUnit - PullRequest
0 голосов
/ 17 октября 2019

Как реализовать шаблон репозитория с помощью хранилища Azure и должен ли он поддерживать тестовые и фиктивные объекты xUnit? Я работаю над тестовыми примерами xUnit и, к сожалению, мне не удалось написать тестовый блок из-за невозможности подделать CloudStorageAccount и CloudTableClient.

Пример кода: -

public abstract class TableStorageRepository 
{
    private readonly IConfiguration _config;
    public CloudStorageAccount _cloudStorageAccount;
    public CloudTableClient _tableClient;
    protected CloudTable _table;

    public TableStorageRepository (IConfiguration configuration)
    {
         _config = configuration;
         _cloudStorageAccount = CloudStorageAccount.Parse ("key");
         _tableClient = _cloudStorageAccount.CreateCloudTableClient (
              new TableClientConfiguration ());
    }

    public async Task<List<T>> GetEntitiesAsync (TableQuery<T> query) 
    {
         _table = _tableClient.GetTableReference("Tablename");
         await _table.CreateIfNotExistsAsync ();
         TableContinuationToken token = null;
         var entities = new List<T> ();
         do 
         {
             var queryResult = await _table.ExecuteQuerySegmentedAsync (query, token);
             entities.AddRange (queryResult.Results);
             token = queryResult.ContinuationToken;
          } while (token != null);

          return entities;
     }
}

1 Ответ

0 голосов
/ 17 октября 2019

Во-первых. Примите, для чего предназначен юнит-тест. Это для тестирования одного модуля вашего кода. Я m guessing you don действительно беспокоюсь о настойчивости в этом случае. Поскольку код, который вы на самом деле тестируете, вероятно, еще дальше. Итак, помня об этом, давайте смоделируем слой персистентности, чтобы вы могли использовать его где-то еще.

Позвольте TableStorageRepository реализовать интерфейс.

ITableStorageRepository {
TableStorageRepository (IConfiguratin configuration);
Task<List<T>> GetEntitiesAsync (TableQuery<T> query);
}

Использование например ::

#Arrange
    var mock = new Mock<ITableStorageRepository>();

mock.Setup(.... etc.

var systemUnderTest = new TheServiceImActuallyTesting(mock.Object);

#Act

var resp = systemUnderTest.GetStuff(query);

#Assert

Ваши утверждения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...