Amazon web services .Net Core DynamodDB使用XUnit进行单元测试
使用C、.net core 2.0,dynamo db 我有我的web api,它与我的dynamo db数据库交互,既有Get方法,也有Post方法 方法示例: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
[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();