[hibernate-dev] Making tests nicer with lambdas
Emmanuel Bernard
emmanuel at hibernate.org
Fri May 16 03:51:43 EDT 2014
These kind of tests are actually not in isolations between lambdas. You
often want to pass an id or value between blocks to be reused. I don't
think lambdas are porous enough for that. That would be surprising.
Emmanuel
On Fri 2014-04-25 10:41, Gunnar Morling wrote:
> Hey,
>
> 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. 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().
>
> At this point I've just done a quick POC and would be interested in
> feedback whether you think that's worth pursuing or not. Note that
> different language levels can be used for test and main code, so we could
> make use of lambdas in tests while ensuring Java 6 compatibility for the
> delivered artifacts.
>
> --Gunnar
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
More information about the hibernate-dev
mailing list