CSC/ECE 517 Fall 2010/ch1 1f TU: Difference between revisions
Jump to navigation
Jump to search
Line 86: | Line 86: | ||
If we run it as "Ruby Application " we will get the output as following | If we run it as "Ruby Application " we will get the output as following | ||
Loaded suite tc__calculator | Loaded suite tc__calculator | ||
Started | Started | ||
F.F. | F.F. | ||
Finished in 0.046 seconds. | Finished in 0.046 seconds. | ||
1) Failure: | 1) Failure: | ||
test_addition(TC_Calculator) [tc__calculator.rb:8]: | test_addition(TC_Calculator) [tc__calculator.rb:8]: | ||
<8> expected but was | <8> expected but was | ||
<7>. | <7>. | ||
2) Failure: | 2) Failure: | ||
test_multiplication(TC_Calculator) [tc__calculator.rb:17]: | test_multiplication(TC_Calculator) [tc__calculator.rb:17]: | ||
<12> | <12> | ||
with id <25> expected to not be equal? to | with id <25> expected to not be equal? to | ||
<12> | <12> | ||
with id <25>. | with id <25>. | ||
4 tests, 4 assertions, 2 failures, 0 errors | |||
4 tests, 4 assertions, 2 failures, 0 errors | |||
=== Shoulda === | === Shoulda === |
Revision as of 15:49, 5 September 2010
Unit-testing frameworks for Ruby
Unit Testing
A unit is the smallest building block of a software. Such a unit can be: a class, a method, an interface etc. Unit testing is the process of validating such units of code.
Benefits
Some of the benefits are:
- Proof of your code
- Better design - Thinking about the tests can help us to create small design elements, thereby improving the modularity and reusability of units.
- Safety net on bugs - Unit tests will confirm that while refactoring no additional errors were introduced.
- Be able to detect and remove defects in a more cost effective manner compared to the other stages of testing.
- Be able to test parts of a source code in isolation.
- Making debugging more efficient by searching for bugs in the probable code areas.
- Documentation - Designers can look at the unit test for a particular method and learn about its functionality.
Unit-testing frameworks
Unit Test Framework is a software tool to support writing and running unit test.
List of unit testing frameworks for Ruby
- Test::Unit
- RSpec
- Shoulda
- Cucumber
Simple Calculator Program in Ruby
This is a simple Calculator class having four methods addition,subtraction,multiplication and division.We will test each of these methods using above frameworks.
class Calculator attr_writer :number1 attr_writer :number2 def initialize(number1,number2) @number1 = number1 @number2 = number2 end #-----------Addition of two numbers----------------# def addition result = @number1 + @number2 return result end #----------Subtraction of two numbers--------------# def subtraction result= @number1 - @number2 return result end #----------Multiplication of two numbers------------# def multiplication result= @number1 * @number2 return result end #-----------Division of two numbers-------------------# def division result = @number1 / @number2 return result end end
Test::Unit
require "calculator" require "test/unit" class TC_Calculator < Test::Unit::TestCase def test_addition assert_equal(8,Calculator.new(3,4).addition) end def test_subtraction assert_same(1,Calculator.new(4,3).subtraction) end def test_multiplication assert_not_same(12,Calculator.new(3,4).multiplication) end def test_division assert_not_equal(5,Calculator.new(8,2).division) end end
If we run it as "Ruby Application " we will get the output as following
Loaded suite tc__calculator Started F.F. Finished in 0.046 seconds. 1) Failure: test_addition(TC_Calculator) [tc__calculator.rb:8]: <8> expected but was <7>. 2) Failure: test_multiplication(TC_Calculator) [tc__calculator.rb:17]: <12> with id <25> expected to not be equal? to <12> with id <25>. 4 tests, 4 assertions, 2 failures, 0 errors
Shoulda
Features of Shoulda
- It allows to write code with more clarity for ruby application
- It allows to run test with the help of Test::Unit Configurations
- It provides context to group tests for a particular requirement
Usage
require "rubygems" require "calculator" require "test/unit" require "shoulda" class TC_Calculator_Shoulda < Test::Unit::TestCase context "Calculate" do should "addition of two numbers " do assert_equal 8,Calculator.new(3,4).addition end should "subtraction of two numbers " do assert_equal 1,Calculator.new(4,3).subtraction end should "multiplication of two numbers" do assert_equal 12,Calculator.new(3,4).multiplication end should "division of two numbers" do assert_equal 4,Calculator.new(12,3).division end end end