【问题标题】:Using specflow for WPF in MVVM在 MVVM 中为 WPF 使用 specflow
【发布时间】:2013-01-24 22:59:39
【问题描述】:

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

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

【问题讨论】:

    标签: wpf mvvm specflow


    【解决方案1】:

    简短的回答: 你可以让你的调用命中数据库,但我建议你将它们模拟出来,除非你的数据库中有逻辑

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

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

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

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

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

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

    【讨论】:

    • 在这种情况下,我已将 specflow 用于单元测试和功能测试。对于单元测试,specflow 在 Given 语句中为测试用例定义和设置 MOCK 数据,然后执行测试。对于功能测试,Given 语句定义了更多的用户输入,此外,我设置了一个单独的功能测试数据库,每晚部署一次,以便可以以自动化方式运行 specflow 功能测试。
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多