Simple and succinct unit testing (Ruby)
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
doc
etc
lib
test
.gitignore
Announcements.txt
Gemfile
History.txt
LICENSE
README.txt
Rakefile
whitestone.gemspec

README.txt

Whitestone: simple and succint unit testing
-------------------------------------------

Whitestone is a unit-testing library, a derivative work of Suraj N. Karaputi's
"dfect" (http://snk.tuxfamily.org/lib/dfect), v2.1 (called "detest" as of v3.0).

Key features:
 * terse assertion methods
 * arbitrarily nested tests
 * colorful and informative console output
 * custom assertions
 * an excellent test runner

Example of test code, demonstrating many assertions:

  D "Person" do
    # setup code run just once
    D.<< { Person.initialize_tfn_lookup }

    # setup code run for each test at this level
    D.< { @p = Person.new("John", "Smith", 49) }

    D "basic methods" do
      Eq @p.first_name, "John"
      Eq @p.last_name,  "Smith"
      Eq @p.age, 49
    end

    D "graceful error message if badly initialized" do
      E(Person::Error) { Person.new(1, 2, 3) }
      Mt Whitestone.exception.message, /invalid first name: 1/
    end

    D "equality" do
      copy = @p.dup
      T { copy == @p }
      Eq copy, @p        # equivalent to above line
    end

    D "interactions with system" do
      D "tax file number is nil until set" do
        N @p.tfn
        F { @p.instance_variable_get :resolved_tfn }
        @p.resolve_tfn
        T { @p.instance_variable_get :resolved_tfn }
        Mt @p.tfn, /\d\d\d-\d\d\d-\d\d\d/
      end

      D "address lookup is cached" do
        a1 = @p.address
        a2 = @p.address
        Id a1, a2           # identical
        Ko a1, Address
      end
    end

  end  # "Person"

The assertion methods demonstrated were:

  T  -- assert true
  F  -- assert false
  N  -- assert object is nil
  Eq -- assert two objects equal
  Mt -- assert string matches regular expression
  Id -- assert two objects are identical (same object)
  E  -- assert error is raised
  Ko -- assert an object is kind_of a class/module

Other assertion methods:

  Ft -- assert two floats are essentially equal
  C  -- assert object is thrown

All assertions can be negated by appending an exclamation mark.

See http://gsinclair.github.com/whitestone.html for full details (and screenshots).