jpw*_*per 9 database integration-testing acceptance-testing specflow
我正在尝试设置SpecFlow进行集成/验收测试.我们的产品在Sqlite中有一个支持数据库(虽然不是很大).
事实证明这实际上是一个有点棘手的问题; 如何为测试建模数据库?
我想知道其他人使用什么模式进行与后备数据库的集成/验收测试.
我可以想到以下方法:
在考虑如何测试之前,我认为您可能会发现查看什么很有价值您想要测试的
\n\n从什么数据开始,我发现采用单个元素或少量元素并想象围绕它们的一组事件确实很有帮助,以便为您提供正确的测试数据来运行测试。例如;
\n\n现在您已经可以实际评估哪些场景真正适合您的数据,例如 \xe2\x80\x9cMSFT\xe2\x80\x9d 和 \xe2\x80\x9cAPPL\xe2\x80\x9d 可能有 1,000 个价格全天都在变化,因此生成 Givens 和 Mocks 将非常耗时。这些数据适合预先捕获。另一方面,\xe2\x80\x9cBob\xe2\x80\x9d 数据在使用生成的数据时效果特别好,因为数据总是可以更改,因此今天是他的生日。
\n\n您的问题似乎不需要考虑的一件事是更新您的数据。例如,您可能希望有一组在实体生命周期的各个阶段工作的测试,例如一些测试处理 \xe2\x80\x9cBaby Bob\xe2\x80\x9d,其他测试处理 \xe2\x80\x9c10yr old Bob\xe2\x80\x9d,或 \xe2\x80\x9cMarried Bob\xe2\x80\x9d 等。如果您的数据库是只读的,那么如果您可以编写测试以便它们只是不要\xe2\x80\x99看其他数据,但有时你想通过测试构建一个故事。如果您的测试确实更改了数据,那么您将无法确保您的测试按顺序运行(请参阅MSTest OrderedTest或 mbUnit DependsOn),或者您可以将测试分开,以便它们各自处理一个独立的数据实体(这是如果您的实体可以在一行中描述,那么很好,但是当您必须读取许多表才能获取它时,就会变得更困难)。
\n\n您可能还需要考虑正在测试的代码,您可以在不同的测试集中改变方法。我目前正在开发一个多层应用程序,该应用程序具有 UI 视图、视图模型、客户端模型、多个通信系统和服务器模型。我也对这些进行了不同的测试。我有一些在单层中工作的测试,模拟其他层以保持我的测试较小。其他测试启动本地服务器和本地客户端,并将两者直接连接起来。最后,我进行了一些测试,启动完整的服务器进程,通过 EMS 进行通信,并使用除 UI 视图之外的所有内容运行一些简单的客户端操作。
\n\n现在要真正回答你的问题,
\n\n[SetupFixture]Linq-to-sql DB 上的 NUnit 完成了此操作。您仍然担心并行测试运行,并且必须平衡给定的粒度(请参阅StackOverflow-BDD 场景何时变得过于具体,您会遇到数据更新排序/数据隔离问题,但这可以非常有效地允许您处理数据故事并在整个测试中增长数据。另一方面,如果一个测试失败并使数据处于不良状态,您可能会遇到很多失败,但至少您只需要查看第一个失败的测试。对于在工作站上的开发人员来说,这种测试也不会很好地进行,因为他们不能只运行单个测试,特别是使用 NCrunch 等工具,它只能运行代码已更改的测试。[Test]DALLayerTests.ShouldReadARowAndCreatePOCO(),但大多数其他层使用模拟数据来测试实际发生了什么,例如[Test]BusinessObjectPersonTests.ShouldGetBirthdayCongratulations()。| 归档时间: |
|
| 查看次数: |
3337 次 |
| 最近记录: |