`
seemoon
  • 浏览: 159470 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

rspec行为驱动测试中model数据的设计策略

阅读更多
rspec行为驱动测试对数据fixtures使用了convention over configuration策略,一个文件名对应一个表,方便了数据测试前的导入,但是当测试用例涉及的表数量多、表与表之间关系复杂、级联关系比较深的情况下,会发生某些公用数据在多个测试用例中被多次使用的情况,如果测试用例间存在制约关系,比如某个测试用例A是要考察某记录类型的个数,另一个测试用例B对公用数据的使用(新增或者修改记录属性)过程中改变了A的结果,这会使测试用例A发生失败,如果关联度高和复杂的情况下,这种失败几乎是雪崩式的,会使得问题的纠正变得比较复杂,因此为了避免这种情况的发生,如何对测试数据进行设计其策略变得较为重要,对策就是尽可能的使数据不发生公用,某些数据公用不会造成测试用例间发生干涉,而有些数据会发生干涉,对这些会发生干涉的测试数据应该独立出来,即新建立数据,并且防止这些数据在其他测试用例中被其他开发人员修改(可以在yml文件中进行注释说明)
分享到:
评论
6 楼 花花公子 2008-07-04  
测试数据库所有表应该都使用innodb引擎,否则不支持回滚。
5 楼 QuakeWang 2008-07-04  
seemoon 写道
Quake Wang 写道
对于数据库做的任何操作在每个测试之间都会rollback,并不会出现你说的情况


你如果去做数据统计分析,在关联性紧密情况下就会出现了。这种情况不是transaction而引起的,而是设计测试数据阶段引起的。

这种情况你需要隔离这些test fixture,不要把所有的东西都放到一个文件里面。
举例来说:我们可以在spec/fixtures目录下面下新建立一个report目录,在下面放需要做统计或者大批量数据测试的fixture文件。然后在测试代码里面这样写:
describe User do
  self.fixture_path += "report"
  fixtures :users
end
4 楼 seemoon 2008-07-04  
Quake Wang 写道
对于数据库做的任何操作在每个测试之间都会rollback,并不会出现你说的情况


你如果去做数据统计分析,在关联性紧密情况下就会出现了。这种情况不是transaction而引起的,而是设计测试数据阶段引起的。
3 楼 seemoon 2008-07-04  
chenk85 写道
Rspec其实反对Fixture构造测试数据,提倡自己mock数据。


那么你们是如何做mock的?
2 楼 chenk85 2008-07-03  
Rspec其实反对Fixture构造测试数据,提倡自己mock数据。
1 楼 QuakeWang 2008-07-03  
对于数据库做的任何操作在每个测试之间都会rollback,并不会出现你说的情况

相关推荐

    中文版的Ruby On Rails实践(PDF)

    除此之外,Rails还支持测试驱动开发(TDD)和行为驱动开发(BDD)。它自带的测试框架Rspec和Test::Unit可以帮助开发者编写全面的测试用例,确保代码的质量和稳定性。 在《Ruby On Rails实践》这本书中,读者可以...

    Ruby on Rails 入门经典教程

    Rails支持TDD(测试驱动开发)和BDD(行为驱动开发),提供了RSpec和Capybara等测试工具,读者将学习如何编写测试用例,确保代码的正确性和稳定性。 在实际项目开发中,安全性和性能优化是重要的话题。教程将讲解...

    很快就会成为有史以来最伟大的网络论坛。_Ruby_.zip

    6. `spec`:RSpec测试文件,用于进行行为驱动开发(BDD)。 为了构建一个成功的网络论坛,开发者需要考虑以下几个核心功能: 1. 用户认证和授权:通过Devise或Authlogic等gem实现用户注册、登录和权限管理。 2. ...

    Ruby Rails 3 Linda

    学习如何使用`remote: true`选项创建Ajax链接和表单,以及使用Unobtrusive JavaScript(UJS)驱动JavaScript行为。 11. **Caching**:Rails提供了多种缓存策略,如页面缓存、动作缓存、碎片缓存和Dalli(Memcached...

    rbnp-551

    在开发和维护【rbnp-551】时,开发者可能会使用TDD(测试驱动开发)或BDD(行为驱动开发)的方法,编写测试确保代码质量。同时,Rails社区提供了大量的插件和gem,使得开发者能够快速集成各种功能,如Devise用于身份...

    骨军

    在Ruby中,测试驱动开发(TDD)和行为驱动开发(BDD)是非常常见的实践。Ruby有诸如RSpec和Minitest这样的测试框架,可以编写单元测试和集成测试,确保代码的正确性。如果"oso-army"项目遵循这些实践,那么源代码中应该...

    rails-airbnb-clone

    在开发过程中,团队可能会使用TDD(测试驱动开发)或BDD(行为驱动开发)的方法,编写大量的自动化测试。此外,为了提升性能和用户体验,项目可能采用了缓存策略,如Action Cable实现的实时通信,或者Webpacker和...

    rails_tutorial

    - RSpec:常用的Rails测试框架,用于编写行为驱动的测试。 - Capybara:模拟用户交互,进行功能测试。 9. **JavaScript与Rails** - Unobtrusive JavaScript (UJS):Rails使用此策略将JavaScript与HTML解耦,通过...

    learn-rails:学习 Rails 项目

    此外,"learn-rails"可能还涵盖了其他关键概念,如RSpec用于行为驱动开发(BDD),测试你的应用程序;Gemfile和Bundler用于管理和依赖库;以及Git和GitHub用于版本控制和协作。你将学习如何设置这些工具,以便在开发...

    saas-201-satya-prakash

    5. **TDD(测试驱动开发)与BDD(行为驱动开发)**:Rails社区重视测试,Rails自带测试工具如RSpec和Capybara,支持TDD和BDD实践,确保代码质量。 6. **Heroku部署**:由于Ruby on Rails的流行,Heroku成为了一个...

    rails_learnings

    - **RSpec和FactoryBot**:Rails社区广泛使用RSpec进行行为驱动开发,FactoryBot则用于创建测试数据。 - **测试套件**:理解如何组织和运行测试是关键,你可能会找到一些测试样例。 7. **Gemfile与Gem管理** - *...

Global site tag (gtag.js) - Google Analytics