【问题标题】:Unit testing mock method单元测试模拟方法
【发布时间】:2014-04-16 08:45:48
【问题描述】:

我是单元测试和模拟框架的新手。

我想测试一个从数据库中检索数据并作为列表返回的方法

 public virtual List<TemplateClass> GetTemplateist()
 {
    //this is dummy implementation 
      return _templatelist;
 }

这里我想通过mock框架测试

而我的测试是这样的。

[SetUp]
public void TemplateListServiceTestSetUp()
{
    objlsttemplateList = new List<TemplateClass>();
    TemplateClass objtemplateclass = new TemplateClass ();
    objlsttemplateList .Add(objtemplateclass);
    mock = new Mock<TemplateClassService>();
    mock.Setup(x => x.GetTemplatelist()).Returns(objlsttemplateList);
}

[Test]
public void TemplateListServiceTest()
{
    TemplateClassService obj = mock.Object;
    var lst= obj.GetTemplatelist();
}

this obj.GetTemplatelist(); 为空。

我对这个result.Result 是正确还是错误感到困惑? . 这是我真正测试GetTemplateList()的方式吗?

请建议我如何测试这样的方法。 提前致谢。

【问题讨论】:

  • 如果您使用数据库交互,您需要展示的不仅仅是“虚拟”实现。您要模拟的是数据库交互,而不是测试的目标。
  • 嗨,你能发布一些例子吗?在我们的 GetTemplateList() 中,我调用了数据库,然后从测试设置中基本上我们模拟了该方法。我无法理解我将在哪里模拟数据库打电话。

标签: c# unit-testing mocking


【解决方案1】:

模拟框架的目的是为您正在测试的代码所具有的依赖项提供实现,以便您可以隔离正在测试的代码。

在您的示例中, GetTemplateList() 方法没有依赖项,并且可能 TemplateClassService 类也没有,因此不需要模拟。您可以简单地调用该方法来测试它,然后断言您收到了预期的结果。

当您将虚拟实现替换为从数据库中检索数据的实际代码时,您将需要模拟框架。那时你可能会注入一个 Repository 接口或类似的东西来处理数据库调用。然后将需要对此进行模拟,以便您实际上不必拥有数据库连接来测试您的代码。

【讨论】:

  • 感谢您的快速响应。GetTemplateList 方法调用了数据库并从数据库中获取数据。所以我使用了模拟。
猜你喜欢
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多