Amazon web services .Net Core DynamodDB使用XUnit进行单元测试

Amazon web services .Net Core DynamodDB使用XUnit进行单元测试,amazon-web-services,asp.net-core,.net-core,amazon-dynamodb,xunit.net,Amazon Web Services,Asp.net Core,.net Core,Amazon Dynamodb,Xunit.net,使用C、.net core 2.0,dynamo db 我有我的web api,它与我的dynamo db数据库交互,既有Get方法,也有Post方法 方法示例: [HttpGet("api/data")] public async Task<List<string>> GetAllData(string userId, string type, string status) { var creds = new BasicAWSCr

使用C、.net core 2.0,dynamo db

我有我的web api,它与我的dynamo db数据库交互,既有Get方法,也有Post方法

方法示例:

    [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 core 2.0,我认为我们必须使用XUnit:

在我的项目中设置Xunit不应该是一个问题

我想知道如何编写测试,其中涉及到dynamo db。这是我第一次在这里使用AWS服务

因此,基本上我需要知道如何模拟aws连接,dynamo db,然后使用各种参数,如上面的方法所示

我找不到关于这个主题的更多细节或任何早期有用的帖子,所以在这里发布一篇


如果aws dynamo db部件不可测试。任何人都可以分享xunit测试的例子,我们可以在其中测试参数,并看到预期的结果吗?

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();
}

是否有人需要输入?我们如何/在何处定义凭据,以及客户端需要的区域。您是否能够提供一个示例和包含此模拟的示例测试用例。ThanksHow我们可以使用这种方法从模拟中获得假数据吗?是的,您可以模拟IAmazonDynamoDB的接口,但是您的代码没有执行或根本没有模拟DynamoDBContext。
var dynamodbHandler = new MyDynamodbHandler(dynamodbClientMock);
dynamodbHandler.GetAllData();