gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:51:33 24 4
gpt4 key购买 nike

使用 C#、.net core 2.0、dynamo 数据库

我有我的 web api,它与我的 dynamo 数据库交互,同时具有 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:https://xunit.github.io/docs/getting-started-dotnet-core

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

我想知道如何在这里编写涉及 dynamo 数据库的测试。这是我第一次在这里使用任何 AWS 服务。

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

我找不到关于此主题的详细信息或任何早期有用的帖子,因此请在此处发布。


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

最佳答案

AWS SDK 使用接口(interface)。您可以轻松地模拟接口(interface) IAmazonDynamoDB。但是尝试使用依赖注入(inject)来做到这一点。好多了。

有点像

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

所以每个函数都使用注入(inject)的IAmazonDynamoDB。你所要做的就是在开始时模拟这个实例

比如 dynamodbClientMock = new Mock();

然后使用这个模拟来启动 MyDynamodbHandler 类

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

关于amazon-web-services - .Net Core DynamodDB 使用 XUnit 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com