Skip to content

maeste/SibillaSamples

Repository files navigation

          Sibilla Samples Quick Ref
--------------------------------------------------------

This project is a collection of basic samples for playing
and getting started with the Sibilla Test features.

The sample project is currently based on a multi-module
Maven project. The main pom.xml adds the Sibilla Maven
Plugin for binding Sibilla to the process-test-classes
Maven phase while turning off Surefire plugin in the
test phase (that's required for handing over the test
execution to Sibilla). This way Sibilla is able to
properly detect which classes are modified in between
subsequent compilations and establish which tests really
need to be executed and which can be safetly skipped.

* Instrumentation-only sample

This sample is enabled by default.
Just run 'mvn clean test' from the main dir of the project
for an initial run of all tests. Sibilla takes care of
instrumenting classes code for populating its metadata
(which is stored in the target directory).
Once the first full test run is over, you can try running
'mvn test' again and you'll see that no test is run, as
nothing changed, so there's no need of re-running anything.
Now you can try applying a basic change to -for instance-
the it.javalinux.sibilla.sample.taxi.Stop class. Then run
again 'mvn test'. Now the only executed tests is
it.javalinux.sibilla.sample.taxi.TaxiTest#testRun as that's
the only test in the only test classes that currently
exercises the modified Stop class.
An additional modification of the Address class followed
by another 'mvn test' would trigger the the same TaxiTest
as before plus it.javalinux.sibilla.sample.taxi.AddressTest
which the other unit test covering the Address class.
Nice, isn't it?

* Annotation sample
To test what Sibilla could with Annotation we have provided
in this sample the interface Location and its LocationTest
To enable them uncomment @Test annotation into LocationTest
and @TestedBy annotation into Location.
Now TestedBy will run (after a mvn clean) LocationTest
against all implementation of Location interface. In our
samples Locations is impemented by Depot and Stop classes.
In both classes the setAddress test have a commented line 
that have to be uncommented to make LocationTest pass.
Try to run "mvn clean install" leaving that line commented
in both concrete class and you will see 2 tests failing.
Uncomment this line and you will get test pass.
The "magic" here is that the test are defined against 
the interface (have a look how we are instanciating Location
object in LocationTest) and TestedBy take care to run this
test against all concrete implementation of the interface.
In fact you are defining runtime comtract on the interface 
veryfied during test phase.
In future version we willsupport also annotation on the other way
(annotation of test classes and not classes under test)