我和一位同事正在进行辩论。我们正处于一个传统的遗留项目中,正在慢慢增加验收测试。他认为我们应该在gui / watin中完成工作,然后使用低级库直接查询数据库,以便在他提出时进行“端到端”测试。
我们正在使用NHibernate,我提倡使用gui / watin然后那些nhibernate对象在验收测试中进行断言。他不喜欢NHibernate在测试中的依赖性。我的断言是我们已经/应该对NHibernate对象进行集成测试,以确保他们按照我们的意图使用DB,在接受测试中使用它们来断言正确的操作没有任何缺点。我也认为他的低级别sql依赖会使测试变得脆弱并且在很多情况下都会重复业务逻辑。
我们店铺中的集成测试基本上意味着它是一个具有依赖性的单个组件,例如fileRepository / FileSystem Domain-NhibernateObject / Database。验收测试意味着通过GUI进入。单位表示所有依赖项已经/可以被模拟/删除,并且您在内存中进行了纯粹的测试,只有被测试的方法实际上正在进行任何实际工作。如果我的defs关闭,请告诉我。
无论如何,任何有关此主题的意见的文章/文档/羊皮纸,您可以指出我将不胜感激。
答案 0 :(得分:2)
您自动化测试的唯一原因是让事情变得更容易。如果你没有改变它们,你可以逃脱手动测试。将测试绑定到数据库将使数据库更难以更改。
将它们绑定到NHibernate对象也无济于事,我害怕!
系统用户不会使用数据库或NHibernate。他们如何获得利益(或为其他利益相关者提供利益)?他们怎么能说它运作良好?如果您可以在验收测试中捕获 ,您将能够在保持应用程序价值的同时更改底层代码和数据。如果有人根据数据生成报告,为什么不生成相同的报告并检查其内容是否符合您的预期?如果数据被另一个系统读取,您是否可以获得该系统的副本并查看其输出到其用户的内容?
无论如何,这是我的观点 - 让验收测试尽可能接近商业价值 - 而here's a blog post I wrote可能有所帮助。你也可以尝试雅虎的Behavior Driven Development group,雅虎在他们中间有相当的经验。
哦,并且进行集成测试来检查你的(N)Hibernate绑定是好的是一个很好的主意。在几个项目中保存了我们。