【问题标题】:Using Specflow with a web service将 Specflow 与 Web 服务一起使用
【发布时间】:2014-06-28 20:19:16
【问题描述】:

我们的 C# 应用程序架构涉及 Web 服务、数据库和 Winforms 应用程序。 winforms 应用程序将调用 Web 服务中名为 ProcessFile 的方法。

我想使用验收测试驱动开发技术并编写了以下 Specflow 用户故事。

Story: Process file
As a knowledge worker
I want to process a file
so that it can go onto the next step.


Given  query A is True
   And File A exists
When I run Process with File A
Then  A backup of the existing file exists
   And a new processed file exists
   And query B is true 
   And query C is true

我们的 Windows 应用程序将从 Web 服务调用整个 Process File 故事。

但是,为了进行 BDD,我们很想进行很多像 IsQueryBTrue 这样的小调用

这会导致令人不快的网络服务,我们不希望 IsQueryBTrue 出现在已发布的 API 中

我现在认为,测试项目直接调用数据服务,而只对 Web 服务进行一些较小的 FileExists 调用,这是一个较小的弊端。然而,这感觉不太正确,因为在测试中肯定应该在生产中运行相同的代码。

我怎样才能充分测试,同时避免做一个健谈的网络服务?

我现在想知道我们是否应该使用 web api 或 wcf 而不是 wsdl web 服务

【问题讨论】:

    标签: web-services bdd specflow


    【解决方案1】:

    无论如何,您要发布的 API 是否可以验证您对 ProcessFile 的调用所期望的行为?

    如果有那么好,您应该从您的 specflow 场景中执行此操作,以验证行为是否符合您的预期。这可能是通过执行一些查询,也可能是通过访问其他网站或其他方式。

    如果没有,那么您将需要验证“内部”预期行为。您可以通过对现有 Web 服务的扩展来执行此操作,以允许使用 IsQueryBTrue 之类的方法(或者可能是通用的 ExecuteQuery)。

    正如您所说,您不想这样做,更好的解决方案可能是为 specflow 测试提供另一种测试服务,以用于验证内部行为。此服务可能仅用于您的开发测试而不提供给生产系统,或者可能使用内部 url 或不同的凭据进行身份验证,以保护使用生产 api 的人使用它。

    归根结底,如果您使用的是行为驱动开发,则必须有某种方式来断言系统的行为符合预期,并且如果没有办法公开执行此操作唯一的方法是内部检查,必须允许测试访问内部系统进行检查。

    对我来说,测试直接调用数据服务以检查所需的东西是否存在似乎完全没问题,特别是如果这些调用已经存在于该服务中。这似乎也比仅向 Web 服务添加新的测试方法更可取。

    【讨论】:

    • @kirsteng,虽然我很高兴接受我的回答,但您可能希望推迟一段时间,直到赏金时间到期。随着赏金时间越来越近,它将在页面上移得更高,更多人会看到它,您更有可能a)获得替代答案或b)让知识渊博的人投票支持他们同意的现有答案,从而为您提供更多确信答案实际上是正确的。
    • 谢谢山姆。我们最终将整个故事转移到服务器端,这样它就可以直接调用一些东西,而不必将它们添加到 Web 服务中。也感谢您的赏金提示。
    • @kirsteng,没问题,很高兴您找到了适合您的解决方案。 SpecFlow 是一个非常棒的工具。
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 2011-01-08
    • 2015-09-30
    • 2023-03-23
    • 1970-01-01
    • 2012-05-22
    • 2012-10-15
    • 2017-02-05
    相关资源
    最近更新 更多