Synthesis visualizations
Thursday, May 29th, 2008Synthesized testing is about accurately simulating object interactions and verifying that each end point of every interaction has been tested to work. The end result of a code base tested employing this strategy forms a specification of the application’s ecosystem in terms of object communication.
Danilo has been recently contributing some excellent work around visual representations of the above. The code is being developed on the Synthesis experimental branch on github.
Consider the Synthesis test_project example.
class DataBrander
BRAND = "METAL"
def initialize(storage)
@storage = storage
end
def save_branded(data)
@storage.save "#{BRAND} - #{data}"
end
def dont_do_this
@storage.ouch!
end
end
class Storage
def initialize(filename)
@filename = filename
end
def save(val)
File.open(@filename, 'w') {|f| f < val}
end
def ouch!
raise Problem
end
end
class Problem < Exception;end
Below are the complete specs for the above implementation.
describe DataBrander do
it "should save branded to storage" do
storage = Storage.new("")
storage.should_receive(:save).with("METAL - rock")
DataBrander.new(storage).save_branded("rock")
end
it "should delegate problem" do
storage = Storage.new("")
storage.should_receive(:ouch!).and_raise(Problem.new)
proc {DataBrander.new(storage).dont_do_this}.should raise_error(Problem)
end
end
describe Storage do
it "should save to file" do
begin
Storage.new("test.txt").save("rock")
File.read("test.txt").should == "rock"
ensure
FileUtils.rm_f("test.txt")
end
end
it "should raise problem on ouch!" do
proc { Storage.new("").ouch! }.should raise_error(Problem)
end
end
A Synthesis run using the DOT formatter produces:
Removing the "should save to file" spec will cause the Synthesis task to fail.
Below is how a real (relatively small) project looks like.
I find the ability to inspect our application modeling through such a representation a very appealing added benefit to the confidence in our system Synthesis provides us with. The DOT formatter will become part of the Synthesis gem as soon as we iron out the few remaining glitches.




