使用涉及发电机Db

时间:2019-01-28 04:00:44

标签: unit-testing amazon-dynamodb moq xunit xunit.net

我有一个.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进行测试或使用实时连接。

很抱歉很长的帖子,但我想弄清楚事情并遵循正确的方法。

有人输入吗?

0 个答案:

没有答案