[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