Synthesis
A tool for verifying mock object assumptions in tests
Installation
sudo gem i synthesis
Download
Synthesis RubyForge page ( rubyforge.org/projects/synthesis )
Dependencies
Synthesis’s core doesn’t have any dependencies.
When used with the Mocha adapter, it will depend on the Mocha library.
When used with the RSpec adapter, it will depend on the RSpec library.
Usage
Synthesis can be used through its Rake task. It has two adapters: Mocha (with Test::Unit, etc) and RSpec. If adapter
is not specified, the Mocha adapter will be used by default.
By default, Synthesis outputs to STDOUT
, but output can be redirected to alternative IO streams.
Synthesis can be setup to ignore certain classes or modules when collecting expectations for verification.
If pattern
is not specified, it will default to test/*/_test.rb
As of version 0.2.0, Synthesis has a DOT
formatter which, when used, will output text in the DOT graph description language, producing system visualizations as specified by the simulated interactions in the system’s tests. The output of the DOT
formatter can be used with tools like Graphviz( www.graphviz.org/ ). The DOT
formatter depends on the parse_tree
and sexp_processor
libraries.
Usage examples
To use with Test::Unit and Mocha, ignoring Array and Hash:
require "synthesis/task"
Synthesis::Task.new do |t|
t.pattern = 'test/unit/**/*_test.rb'
t.ignored = [Array, Hash]
end
To use with RSpec, running all specs in the spec
directory:
require "synthesis/task"
Synthesis::Task.new do |t|
t.adapter = :rspec
t.pattern = 'spec/**/*_spec.rb'
end
To to a file:
require "synthesis/task"
Synthesis::Task.new do |t|
t.out = File.new "synthesis.test.txt", "a"
end
To output a DOT graph, first make sure you have sexp_processor installed:
sudo gem install sexp_processor
Then, to output a file called “synthesis.dot”, do (if formatter_out is not specified, the default ouput is STDOUT):
require "synthesis/task"
Synthesis::Task.new do |t|
t.formatter = :dot
t.formatter_out = "synthesis.dot"
end
To use Synthesis with Rails:
require "synthesis/task"
Synthesis::Task.new do |t|
RAILS_ENV = "test"
Rake::Task['environment'].invoke # This loads the Rails environment, which may make your build slower. Use only if needed
t.pattern = 'test/**/*_test.rb'
end
Utilities
mock_instance
require "synthesis/util/mock_instance"
foo_mock = Foo.mock_instance(arg_one, arg_2)
This is equivalent, but without calling the real initialize
method, to:
foo_mock = Foo.new
Foo.expects(:new).with(arg_one, arg_two).returns(foo_mock)
Or, in the case of RSpec, it is equivalent to:
foo_mock = Foo.new
Foo.should_receive(:new).with(arg_one, arg_two).and_return(foo_mock)
Either "mocha_standalone"
or "spec/mocks"
need to be required before using mock_instance
.
Git
Public clone URL: git://github.com/gmalamid/synthesis.git
Contributors
Danilo Sato, Paul Nasrat, Jerome Riga
Discuss
groups.google.com/group/synthesized-testing