On 25 Jan 2014, at 10:41, Gunnar Morling <gunnar(a)hibernate.org> wrote:
I've played around a bit with the idea of using Java 8 lambdas to
make
tests easier to write and read. We have many tests which open a session and
TX, do some stuff, commit, open a new TX (and/or session), do some
assertions and so on:
Session session = openSession();
Transaction transaction = session.beginTransaction();
// heavy testing action...
transaction.commit();
session.clear();
transaction = session.beginTransaction();
// load, assert...
transaction.commit();
session.clear();
The same could look like this using Java 8 lambdas:
Foo foo = inTransactionWithResult( (session, tx) -> {
// heavy testing action...
} );
inTransaction( (session, tx) -> {
// load, assert...
} );
Extracting the session/TX handling removes quite some clutter and focuses
more on the actual testing logic.
Makes things a but nicer. A bit of syntactic sugger. Not sure though whether it is enough
to
switch to JDK 8 for building.
It also avoids problems due to dangling
transactions e.g. in case of assertion failures as the TX handling is done
in a finally block in inTransaction().
A lot of this should already be taken care of by the CustomRunner we use to execute the
tests.
—Hardy