快速业务通道

跨越边界: 在集成框架中进行测试,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
    assert true    end    def test_new     trails = Trail.find_all     Trail.new do |trail|      trail.name = "Barton Creek"      trail.description = "A little water in the Spring. You''ll get wet."      trail.difficulty = "medium"      trail.save     end     bc = Trail.find_by_name("Barton Creek")     assert_equal "medium", bc.difficulty     assert_equal trails.size + 1, Trail.find_all.size    end

跨越边界: 在集成框架中进行测试,第1部分(5)

时间:2011-07-25 IBM Bruce Tate

这个代码惊人的紧凑。只需要键入上述代码以及两个断言,就可以操纵持久模型。这种经济的投入正 是脚本语言在其他环境中如此流行的原因。测试也是需要经济投入的地方。

现在可以运行测试用例,您将看到两个新断言显示在测试报告中。使用 Ruby 时,只需保存并编译测 试即可。清单 12 显示了测试运行的结果:

清单 12. 测试结果

> ruby test/unit/trail_test.rb    Loaded suite test/unit/trail_test    Started    .    Finished in 0.038578 seconds.    1 tests, 1 assertions, 0 failures, 0 errors    bruce-tates-computer:~/rails/trails batate$ ruby test/unit/trail_test.rb    Loaded suite test/unit/trail_test    Started    ..    Finished in 0.182043 seconds.    2 tests, 3 assertions, 0 failures, 0 errors

Fixture 和回滚

有三个问题影响了对数据库支持代码的测试。它们都与两个特性有关:性能和重复性。与内存中的操 作相比较,数据库调用的性能是非常低的。如果测试运行需要太长时间,那么您可能就不想运行它们了。 另一个问题是一个测试用例对另一个测试用例的影响。因为数据库调用在性质上是持续的,所以要把一个 测试在数据库中的变化与另一个数据库中的隔离开。最后的问题是前两个问题的组合。为了让数据库测试 用例可重复而增加设置和拆卸的负担时(为每个新的测试用例添加记录、运行测试并删除这些记录),带 来的开销可能是让人无法接受的。与这种开销相比,测试用例开销简直是小巫见大巫。

Ruby on Rails 用 fixture 和事务回滚来帮助解决这些问题。在 Rails 中,一个 fixture 就是一个 包含测试用例数据的文件。在创建这个简单应用程序时,同时还创建了一个开发数据库和一个测试数据库 。创建开发数据库是很正常的;但是您可能不想让生产代码和开发环境共享同一个数据库。而创建测试数 据库因为另一个原因也很重要。每个测试都在测试用例开始时装入 fixture 中的测试数据。然后,测试 用例对数据库进行修改,并测试这些修改的结果。最后,Rails 回滚这些变化,将数据库返回到测试方法 运行之前的状态。

现在要制作一个测试 fixture 并为它编写一个测试。请编辑 test/fixtures/trails.yml 文件,添加 一个记录,如清单 13 所示:

清单 13. 添加记录

first:     id: 1     name: "Emma Long"     description: "A real bike breaker."     difficulty: "hard"    another:     id: 2     name: "Bear Creek"     description: "Too many downed trees."     difficulty: "easy"

清单 13 使用叫做 YAML 的语言,这个语言描述结构化的数据(请参阅 参考资料)。此文件对空格很 敏感,所以该当用空格代替制表符并完全按原样键入数据项时,请确保删除了所有尾部空格。

同样,还要把这个测试用例添加到 trails_test.rb 中:

def test_find     assert

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号