【发布时间】:2016-06-16 14:41:48
【问题描述】:
我正在开发 Web 服务的验收测试。测试通过 Specflow 驱动并使用 SQL Server CE 作为数据库。该服务与其他应用程序和模块共享数据库,并使用通过其中一个应用程序创建的一些数据。
从我的产品来看,“数据”有两种:
- 我们只使用的数据
- 我们创建/修改的数据
在运行测试用例之前,您需要设置数据库的初始状态。对于仅消费的数据,初始化数据的唯一方法是直接插入数据库。但是对于托管数据,我们可以直接在 DB 中设置状态,或者像用户一样调用 API。
例如,我想测试我的方法“updateItem”是否正确地将商品的价格更新为“y”。为了能够执行此方法,我需要使用价格为“x”的初始项目设置我的数据库。有两种方法可以做到这一点:
- 直接在数据库中设置item的状态
- 调用“createItem”
第一种方法的优点是我只执行我想测试的方法,所以如果测试失败,只有一个原因失败。缺点是,如果将来创建的项目的状态发生变化(添加新字段),我需要手动在初始状态下进行更改。
另一方面,使用第二种方法的利弊是相反的。测试可能会因为“createItem”失败而失败,尽管一些测试框架会告诉您失败的是设置,而不是实际测试。但无论“createItem”发生什么变化,这些变化都会自动包含在您的测试中,您不必手动更新初始状态。
非常感谢任何建议。
【问题讨论】:
标签: entity-framework web-services automated-tests specflow acceptance-testing