4

我第一次尝试使用 MVVM 模式的 WPF 项目的 specflow。所以,我有存储库、控制器、视图和视图模型。存储库调用 web 服务,它访问数据库并返回数据。视图模型具有验证用户输入和调用存储库方法的方法。

在我的规范流程中,我应该进行完整的调用,包括存储库方法,还是应该使用 Moq 模拟这些方法?是否有意义?

4

1 回答 1

4

简短的回答: 你可以让你的电话打到数据库,但我建议你把它们模拟出来,除非你的数据库中有逻辑

长答案: 有两种相互竞争的方式来看待这个问题。首先,您希望使用 SpecFlow 进行什么样的测试,其次,访问您的数据库有多容易。

如果您使用 SpecFlow 来测试您的低级技术要求,那么您实际上是在按示例样式以规范进行单元测试。所以这真的应该决定你使用模拟来隔离你的单位。(我个人会坚持使用 NUnit 进行这些测试。)

然而,如果您使用 SpecFlow 来测试您的业务场景(即验收测试),那么您的场景依赖于多个单元来提供功能。这更像是集成或系统测试,需要涉及很多组件,理论上因为我们正在测试整个系统,我们应该在其中包含一个数据库,特别是如果您甚至有一个您可能想要的存储过程或视图稍后进行回归测试。

然而,第二种看待这个问题的方法是,拥有一个可用于测试的数据库需要付出多大的努力。

  • 如果您的开发团队中有不止一个人,如果同时运行测试,您需要哪些策略来避免失败?
    • 例如,您可以在每次运行中生成一个新的唯一客户,并且只访问针对该客户的更新和查询,那么您最终不会得到错误数量的订单。
  • 测试运行后如何重置数据库?
    • 例如,如果您使用正确类型的数据库,您可以将一个空的 .mdb 检查到您的源代码控制中,然后回滚/恢复到那个。

我个人发现,对于没有存储过程和视图的简单数据库,模拟更好,但是一旦您将业务逻辑添加到数据库中,您就需要以某种方式测试该逻辑。

于 2013-01-24T14:59:39.947 回答