我有一个.net核心api项目,我在其中连接到dynamo db作为数据库。 我还有几个端点可用于获取数据,保存数据和从dynamo db删除数据。现在,我想为这些端点编写单元测试用例。 我能够获得正确数据的单元测试,正确地将数据保存到dynamo db,正确地将数据从dynamo db中删除。
要开始使用它,我在stackoverflow上遇到了以下帖子,并且我已经有一个类似的设置: .Net core testing with Xunit
基于以上帖子中接受的答案,我有几个问题:
以上文章中的用户正在使用MOQ来收集数据并传递给其dynamodb管理器进行设置,这意味着例如我们可以根据以下测试对模型进行模拟
[Fact]
public async Task GetAllData_ShouldGetAll()
{
var searchResult = new List<MyModel>()
{
new MyModel() {FirstName = "abc", LastName="def", Address = "123 street", UpdatedBy = "abc"},
new MyModel() {FirstName = "ghj", LastName="asd", Address = "56 street", UpdatedBy = "ghj"}
};
_dbManager
.Setup(_ => _.GetAsync(It.Is<List<ScanCondition>>(list => list.Count == 2)))
.ReturnsAsync(searchResult);
// Act
var okResult = _setController.GetAllData().Result as OkObjectResult;
// Assert
var items = Assert.IsType<List<MyModel>>(okResult.Value);
Assert.Equal(2, items.Count);
}
根据上述测试,由于我们的模型设置了2条记录,因此当我们检查项目计数为2时,上述测试返回true。
是: -这是模拟的正确方法吗? -这是编写测试并检查它是否从db返回所有数据的正确方法。
现在,以上全部内容都是关于嘲讽的。如果我不想模拟并使用实际的数据库来检查和运行测试该怎么办。我该怎么办。
我尝试如下设置测试构造器:
public class ValuesControllerTests
{
private ValuesController _valuesController;
private readonly IDynamoDbManager<MyModel> _dbManager;
public ValuesControllerTests()
{
_dbManager = mockRepository.Create<IDynamoDbManager<MyModel>>();
_valuesController = new ValuesController(options, _dbManager);
}
}
但是我的_dbManager始终为null,我不确定如何正确设置它。
我的最后一个问题: -哪种方法更好:使用moq进行测试或使用实时连接。
很抱歉很长的帖子,但我想弄清楚事情并遵循正确的方法。
有人输入吗?