【发布时间】:2013-01-24 22:59:39
【问题描述】:
我第一次尝试使用 MVVM 模式的 WPF 项目的 specflow。所以,我有存储库、控制器、视图和视图模型。存储库调用 web 服务,它访问数据库并返回数据。视图模型具有验证用户输入和调用存储库方法的方法。
在我的规范流程中,我应该进行完整的调用,包括存储库方法,还是应该使用 Moq 模拟这些方法?有意义吗?
【问题讨论】:
我第一次尝试使用 MVVM 模式的 WPF 项目的 specflow。所以,我有存储库、控制器、视图和视图模型。存储库调用 web 服务,它访问数据库并返回数据。视图模型具有验证用户输入和调用存储库方法的方法。
在我的规范流程中,我应该进行完整的调用,包括存储库方法,还是应该使用 Moq 模拟这些方法?有意义吗?
【问题讨论】:
简短的回答: 你可以让你的调用命中数据库,但我建议你将它们模拟出来,除非你的数据库中有逻辑
长答案: 有两种相互竞争的方式来看待这个问题。首先,您希望使用 SpecFlow 进行什么样的测试,其次,访问您的数据库有多容易。
如果您使用 SpecFlow 来测试您的低级技术要求,那么您确实是在以 示例说明 风格进行单元测试。所以这真的应该决定你使用模拟来隔离你的单位。 (我个人会坚持使用 NUnit 进行这些测试。)
但是,如果您使用 SpecFlow 来测试您的业务场景(即验收测试),那么您的场景依赖于多个单元来提供功能。这更像是集成或系统测试,需要涉及很多组件,理论上因为我们正在测试整个系统,我们应该在其中包含一个数据库,特别是如果您甚至有一个您可能想要的存储过程或视图稍后进行回归测试。
但是,第二种看待这个问题的方法是,拥有一个可用于测试的数据库需要付出多大的努力。
我个人发现,对于没有存储过程和视图的简单数据库,模拟更好,但是一旦您将业务逻辑添加到数据库中,您就需要以某种方式测试该逻辑。
【讨论】: