Модульное тестирование .Net Core DynamodDB с помощью XUnit - PullRequest
0 голосов
/ 12 октября 2018

Использование C #, .net core 2.0, динамо-база данных

У меня есть веб-интерфейс API, который взаимодействует с моей базой данных динамо-базы данных, имеющей методы Get и Post.

Пример метода Mehthod:

    [HttpGet("api/data")]
    public async Task<List<string>> GetAllData(string userId, string type, string status)
    {
        var creds = new BasicAWSCredentials(awsId, awsPassword);
        var dynamoClient = new AmazonDynamoDBClient(creds, dynamoRegion);
        var context = new DynamoDBContext(dynamoClient);
        List<ScanCondition> conditions = new List<ScanCondition>();
        conditions.Add(new ScanCondition("UserId", ScanOperator.Equal, userId));
        conditions.Add(new ScanCondition("Type", ScanOperator.Equal, type));
        conditions.Add(new ScanCondition("Status", ScanOperator.Equal, status));

        var results = await context.ScanAsync<Common.Job>(conditions, new DynamoDBOperationConfig() { OverrideTableName = MyDynamoTable }).GetRemainingAsync();
        return results.Select(x => x.UpdatedBy.ToLower()).ToList();
    }

Теперь я хочу написать модульные / интеграционные тесты для моих методов API.Ранее я использовал NUnit, но с ядром .net 2.0 я считаю, что мы должны использовать XUnit: https://xunit.github.io/docs/getting-started-dotnet-core

Настройка Xunit в моем проекте не должна быть проблемой.

Я хотел знатьКак я могу написать тест, который включает динамо БД здесь.Это первый раз, когда я использую любой сервис AWS здесь.

Поэтому мне нужно знать, как я могу смоделировать соединение aws, выполнить динамо-базу данных, а затем использовать различные параметры, как показано в моем методе выше.

Я не смог найти подробности или какой-либо ранее полезный пост на эту тему, поэтому разместил его здесь.


Если часть базы данных aws динамо не проверяется.Кто-нибудь может поделиться примером теста xunit, где мы можем проверить параметры и посмотреть ожидаемый результат?

1 Ответ

0 голосов
/ 20 октября 2018

AWS SDK работают с интерфейсами.Вы можете легко смоделировать интерфейс IAmazonDynamoDB.Но попробуйте сделать это с помощью инъекции зависимостей.Намного лучше.

Что-то вроде

private readonly IAmazonDynamoDB dynamodbClient;
private readonly IDynamoDBContext context;

public MyDynamodbHandler(IAmazonDynamoDB client)
{
    this.dynamodbClient = client;
    this.context = new DynamoDBContext(client);
}

[HttpGet("api/data")]
public async Task<List<string>> GetAllData(string userId, string type, string status)
{

    List<ScanCondition> conditions = new List<ScanCondition>();
    conditions.Add(new ScanCondition("UserId", ScanOperator.Equal, userId));
    conditions.Add(new ScanCondition("Type", ScanOperator.Equal, type));
    conditions.Add(new ScanCondition("Status", ScanOperator.Equal, status));

    var results = await this.context.ScanAsync<Common.Job>(conditions, new DynamoDBOperationConfig() { OverrideTableName = MyDynamoTable }).GetRemainingAsync();
    return results.Select(x => x.UpdatedBy.ToLower()).ToList();
}

Так что каждая функция использует введенный IAmazonDynamoDB.Все, что вам нужно сделать, это смоделировать этот экземпляр в начале

, например, DynamodbClientMock = new Mock ();

Затем использовать эту модель для запуска класса MyDynamodbHandler

var dynamodbHandler = new MyDynamodbHandler(dynamodbClientMock);
dynamodbHandler.GetAllData();
...