【问题标题】:Unit Test Cases with Mocking repository on real data not fake data带有模拟存储库的单元测试用例真实数据而不是假数据
【发布时间】:2018-04-05 05:22:04
【问题描述】:

我对 Mocking 和假对象有基本的了解,并为单元测试用例方法传递假数据。但是我们是否可以使用我们的存储库返回的实际数据,而不是为我们的单元测试方法创建我们自己的假数据。

我将 NUnit 用于 .Net MVC 5 应用程序。如下示例代码行所示:

mockType.Setup(x=>x.GetUserDetails().Returns(
    new UserDetail(){ id = 1 , name = "John"}
);

所以我需要从方法 GetUserDetails 返回实际数据,而不是创建假数据(就像我们在上面的示例中所做的那样)。

我需要从 DB 表中获取用户详细信息,而不是像上面示例中那样创建虚假的 UserDetail。请提供您的建议,如果您需要更多信息,请告诉我。

提前致谢。

【问题讨论】:

  • 如果你想让GetUserDetails()从你的数据库返回数据,你不需要模拟它,你为什么不像平常一样设置一个测试数据库呢?
  • 你给出了一个好主意,但是每次我们的原始数据库发生变化时,我们都需要在我们的测试数据库中做同样的变化。只是让您知道,我们可以在除生产之外的所有环境中使用我们的实际数据库而没有任何问题。
  • 另外,我想知道如何从我们的存储库方法(已编写)中获取数据,以创建假数据对象。如果我没有道理,请告诉我。
  • 好吧,如果已经写好了,那就用吧,按照你正常使用的方式,把你的测试项目的连接字符串改一下就行了。
  • 那么,如果您想使用更新数据中的数据运行测试,只需在运行测试之前复制它即可。

标签: asp.net-mvc unit-testing nunit moq testcase


【解决方案1】:

如果您测试应用程序 UI -> 数据库 -> UI 的完整“管道”,则访问应用程序其他层的测试称为“集成测试”或“验收测试”。

在您的特定情况下,您需要拥有与生产中使用的架构完全相同的空数据库。

  • 为测试用例插入数据
  • 执行测试
  • 断言结果
  • 清理数据库

每次测试后访问真实数据库、插入数据、清理数据库都会使测试变慢 - 对于集成或验收测试来说,慢一点是可以的。

为了使测试和生产数据库架构保持同步,您应该选择一些维护脚本/物流。

【讨论】:

  • 这是一个很好的解释。如果我再次使用相同的模拟设置,是否可以将实际数据提供给我的模拟存储库?如原始问题所示。
  • 是的,这是可能的——只需调用GetUserDetails 的实际实现即可。可能您需要使用对应的连接字符串和其他依赖项配置实际服务。
  • 如果你能给我一些例子会很有帮助,如果你有的话,谢谢!
  • 查看您的生产项目中的配置 - 使用相同的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多