【问题标题】:Dependencies in Acceptance Testing验收测试中的依赖关系
【发布时间】:2011-04-22 11:25:07
【问题描述】:

我和一位同事正在辩论。我们正在进行一个糟糕的遗留项目,并且正在慢慢添加验收测试。他认为我们应该在 gui/watin 中完成这项工作,然后使用低级库直接查询数据库以获得他所说的“端到端”测试。

我们正在使用 NHibernate,我主张使用 gui/watin 然后使用那些 nhibernate 对象在验收测试中进行断言。他不喜欢 NHibernate 在测试中的依赖性。我的断言是我们已经/应该对 NHibernate 对象进行集成测试,以确保它们以我们想要的方式与 DB 一起工作,此时在验收测试中使用它们来断言正确操作没有任何缺点。我也认为他的低级 sql 依赖会使测试变得脆弱,并且在很多情况下会重复业务逻辑。

我们商店的集成测试基本上意味着它是具有依赖关系的单个组件,例如文件存储库/文件系统域-NhibernateObject/数据库。验收测试意味着通过 GUI 进入。单元意味着所有依赖项都具有/可以被模拟/存根,并且您在内存中进行了纯测试,只有被测方法实际执行任何实际工作。让我知道我的 defs 是否关闭。

无论如何,任何文章/文档/羊皮纸对这个主题有意见,你可以指出我将不胜感激。

【问题讨论】:

    标签: nhibernate acceptance-testing


    【解决方案1】:

    自动化测试的唯一原因是让事情更容易改变。如果您不更改它们,则可以摆脱手动测试。将测试绑定到数据库将使数据库更难更改。

    恐怕将它们绑定到 NHibernate 对象也无济于事!

    您系统的用户不会使用数据库或 NHibernate。他们如何获得利益(或向其他利益相关者提供利益)?他们如何才能知道它运行良好?如果您可以在验收测试中捕获,您将能够更改底层代码和数据,同时仍然保持应用程序的价值。如果有人根据数据生成报告,为什么不生成相同的报告并检查其内容是否符合您的预期?如果数据被另一个系统读取,您能否获取该系统的副本并查看它输出给用户的内容?

    无论如何,这是我的意见 - 让验收测试尽可能接近业务价值 - here's a blog post I wrote 这可能会有所帮助。你也可以试试 Yahoo 上的Behavior Driven Development group,他们有相当多的经验。

    哦,进行集成测试以检查您的 (N)Hibernate 绑定是否良好是一个好主意。帮助我们完成了几个项目。

    【讨论】:

    • 那么你是说验收测试应该只知道公共接口(UI 或 Web 服务)?例如,添加发票。验收测试会将发票添加到一个页面中,然后查看带有发票列表的另一页,并确保它显示正确的信息?我认为我正在收集的是验收测试将模拟最终用户交互。
    • 就是这样,是的。例如,与其检查一个特定的菜单是否出现在你的菜单栏中,为什么不实际使用那个菜单呢?用户不在乎菜单是否在那里,如果他们不能使用它。还有助于鼓励开发人员制作垂直切片的端到端功能,以吸引利益相关者并获得反馈,而不是横向拆分并花费数月时间来生产任何东西。
    • 经过深思熟虑后,我不得不说我同意 Lunivore。我和 Mike O'Brien 遇到的真正问题是我们跨越了一些测试类型的界限,所以我们的行话都搞砸了。
    猜你喜欢
    • 2019-12-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多