CSC/ECE 517 Fall 2009/wiki1b team1: Difference between revisions
Line 211: | Line 211: | ||
testing framework within Ruby's built in Test::Unit | testing framework within Ruby's built in Test::Unit | ||
''Shoulda Example with Test::Unit'' | |||
class UserTest < ActiveRecord::TestCase | |||
should_belong_to :account | |||
should_have_many :posts | |||
should_validate_presence_of :email | |||
should_allow_values_for :email, "test@example.com" | |||
should_not_allow_values_for :email, "test" | |||
end | |||
== BDD: Behavior Driven Development == | == BDD: Behavior Driven Development == |
Revision as of 20:11, 28 September 2009
CSC/ECE 517 Fall 2009
Resources for Rails (other than IDEs)
IDEs are a valuable resource for Rails development, however there are many other resources and tools that can either replace or supplement IDEs.
Resources for Rails other than IDEs
Rails API - http://api.rubyonrails.org/
This site documents Rails files, classes and methods that can be used to build a Rails application.
Rails Forum - http://railsforum.com/
A discussion forum covering all aspects of Rails for beginners and experts including planning, programming, extensions and production.
Introducing Ruby on Rails
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/
An excellent introduction to Rails for novices
Installers
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl
An all in one, single click installer for Windows that includes a Rails server.
Mac: Locomotive - http://locomotive.raaum.org/
Rails Projects - http://www.workingwithrails.com/
A Database of Rails projects, programmers and websites
Rails plugins - http://agilewebdevelopment.com/
A collection of Rails open source plugins, searchable by category or keyword.
Sample Rails - http://snippets.dzone.com/tag/rails
A collection of Rails code snippets.
Agile Rails book - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&n=283155
An excellent resource for learning how to apply Agile programming concepts to Rails.
Rails cheatsheet - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf
One user's list of best practices, gotchas and quirks of developing with Rails.
Rails best practices - http://www.therailsway.com/
An official best practices list for programming in Rails.
Advanced Rails - http://webonrails.com/
A resource for the advanced Rails programmer.
Rails Blog - http://weblog.rubyonrails.org/
An online community of updates about current happenings with the Rails platform.
Rails Guides - http://guides.rubyonrails.org/
An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.
Authoring Rails plugins - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i
A complete guide to authoring your own Rails plugins.
Tools for Rails (other than IDEs)
Test Unit The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby. There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.
[1] The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation
Example [2]
Image:class CalculatorTest < Test::Unit::TestCase def test_add_two_numbers_for_the_sum calculator = Calculator.new assert_equal 4, calculator.sum(2, 2) end end
TDD: Test Driven Development
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is
written prior to completed production code. The goal of TDD is the specification of requirements and not the validation of
requirements. There are a few testing frameworks that are used to implement the TDD programming technique.
[3] This link provides a comprehensive overview of test driven development practices and available resources for implementation.
RSpec
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.
Example:
The following code will fail during execution. Expresses some basic desired behavior[4]
# bowling_spec.rb require ‘bowling’ describe Bowling do it "should score 0 for gutter game" do bowling = Bowling.new 20.times { bowling.hit(0) } bowling.score.should == 0 end end
The following code pass execution. Just enough code to make it pass.[5]
# bowling.rb class Bowling def hit(pins) end def score 0 end end
[6]
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step
implementation process
Cucumber
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as
documentation, automated tests and development-aid - all rolled into one format.
Cucumber Example:
Feature: Log in and out As an administrator I want to restrict access to certain portions of my site In order to prevent users from changing the content Scenario: Logging in Given I am not logged in as an administrator When I go to the administrative page And I fill in the fields | Username | admin | | Password | secret | And I press "Log in" Then I should be on the administrative page And I should see "Log out" Scenario: Logging out ...
[7] The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported
frameworks.
Another Cucumber Example: Scenario: See all vendors
Given I am logged in as a user in the administrator role And There are 3 vendors When I go to the manage vendors page Then I should see the first 3 vendor names
Shoulda
An extension to Test::Unit with additional helpers, macros, and assertions.
[8] The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda
testing framework within Ruby's built in Test::Unit
Shoulda Example with Test::Unit
class UserTest < ActiveRecord::TestCase should_belong_to :account should_have_many :posts should_validate_presence_of :email should_allow_values_for :email, "test@example.com" should_not_allow_values_for :email, "test" end
BDD: Behavior Driven Development
[9] Behavior driven development was born from the concepts behind the implementation of TDD. It brings together strands from
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful
approaches to software development more evident. Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing.
[10] The link supports BDDs definition with additional links to more viable behavior driven development resources.
Other Test Tool Resources
Watir: is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It
is simple and flexible. [11] The link provides an overview of Watir with installation specifications, examples, and supported platforms
NullDB: [12] a way to speed up testing by avoiding database use.
Bleakhouse: memory leak detection [13] The link gives additional information on Bleakhouse profiling for memory leaks
ruby-debug: Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger.
[14] The link provides twenty additional debug resources available for RoR
Conclusion
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.
References
All sources used to create this wiki are linked in the above text.