Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

118 lines (82 sloc) 3.839 kB

Tryouts - v0.4 BETA

Tryouts is a high-level testing library for your command-line applications and Ruby codes.

Terminology

Tryouts is a bit different than other testing libraries. Test definitions are organized in a similar way as Shoulda tests (although the keywords in the syntax are different).

  • Tryout: a set of drills (like basketball tryouts)

  • Drill: a test.

  • Dream: the expected outcome of a drill.

Testing a command-line application (a CLI)

Tryouts tests command-line applications by comparing expected output with the actual output. Let's say we have an executable called mockout and we want to test the following commands:

$ bin/executable
$ bin/executable -f yaml

The tryout definition would look like this:

command :executable, "path/2/executable"

tryout "Common Usage" do
  drill  "No Command"
  drill "YAML Output", :f, 'yaml'
end

And the expected output would be defined like this:

dream "No Command" do
  output inline(%Q{
        Date:                                   2009-02-16
     Players:            d-bam, alberta, birds, condor man
      Owners:            greg, rupaul, telly, prince kinko
  })
end
dream "YAML Output" do
  format :yaml
  output ({
    "Date" => "2009-02-16",
    "Players" => ["d-bam", "alberta", "birds", "condor man"],
    "Owners" => ["greg", "rupaul", "telly", "prince kinko"]
  })
end

Testing Ruby codes (an API)

Tryouts employs the same approach for testing Ruby codes. The return value of the drill block is compared to the expectation defined by the dream. Here is an example of including dreams inside the tryout definition.

library :caesars, LIBRARY_PATH

tryout "Common Usage" do
  dream "Some Maths", 3 
  drill "Some Maths" do
    12 / 4
  end

  dream "A Block", Proc, :class  # Test the class type instead of the value
  drill "A Block" do
    Proc.new do
      :anything
    end
  end
end

ALPHA Notice

This library is very new (est. 2009-05-19) and has not been vetted by the scrutiny of time. In particular you can expect:

  • Ugly/awkward output from the tryouts executable. I wrote the core functionality that I needed to start writing tryouts for my other projects. I haven't spent very much time on reporting yet. However, this will change!

  • The test definition syntax may change in future releases.

  • Unexpected errors.

3 Ways to define tryouts

There are three ways to define an instance of this class:

On Threads

Tryouts does some funky stuff to make it simple to write tests. This “funky stuff” means that this library is *not thread-safe at definition-time*. However, once all tryouts files are parsed (or in OO-syntax, once all objects are created), this class should be *thread-safe at drill-time*.

More Info

Thanks

  • Everyone at Utrecht.rb

Credits

  • Delano (@solutious.com)

Related Projects

License

See: LICENSE.txt

Jump to Line
Something went wrong with that request. Please try again.