Using the Fluent NHibernate Persistence Tester and the Ghostbusters Test

2 min read


NHibernate 3.0 Cookbook

NHibernate 3.0 Cookbook

Get solutions to common NHibernate problems to develop high-quality performance-critical data access applications

  • Master the full range of NHibernate features
  • Reduce hours of application development time and get better application architecture and performance
  • Create, maintain, and update your database structure automatically with the help of NHibernate
  • Written and tested for NHibernate 3.0 with input from the development team distilled in to easily accessible concepts and examples
  • Part of Packt’s Cookbook series: each recipe is a carefully organized sequence of instructions to complete the task as efficiently as possible
        Read more about this book      

(For more resources on NHibernate, see here.)

The reader would benefit from reading the previous article on Testing Using NHibernate Profiler and SQLite.

Using the Fluent NHibernate Persistence Tester

Mappings are a critical part of any NHibernate application. In this recipe, I’ll show you how to test those mappings using Fluent NHibernate’s Persistence tester.

Getting ready

Complete the Fast testing with SQLite in-Memory database recipe mentioned in the previous article.

How to do it…

  1. Add a reference to FluentNHibernate.
  2. In PersistenceTests.cs, add the following using statement:

    using FluentNHibernate.Testing;

  3. Add the following three tests to the PersistenceTests fixture:

    public void Product_persistence_test()
    new PersistenceSpecification<Product>(Session)
    .CheckProperty(p => p.Name, "Product Name")
    .CheckProperty(p => p.Description, "Product Description")
    .CheckProperty(p => p.UnitPrice, 300.85M)

    public void ActorRole_persistence_test()
    new PersistenceSpecification<ActorRole>(Session)
    .CheckProperty(p => p.Actor, "Actor Name")
    .CheckProperty(p => p.Role, "Role")

    public void Movie_persistence_test()
    new PersistenceSpecification<Movie>(Session)
    .CheckProperty(p => p.Name, "Movie Name")
    .CheckProperty(p => p.Description, "Movie Description")
    .CheckProperty(p => p.UnitPrice, 25M)
    .CheckProperty(p => p.Director, "Director Name")
    .CheckList(p => p.Actors, new List<ActorRole>()
    new ActorRole() { Actor = "Actor Name", Role = "Role" }

  4. Run these tests with NUnit.

How it works…

The Persistence tester in Fluent NHibernate can be used with any mapping method. It performs the following four steps:

  1. Create a new instance of the entity (Product, ActorRole, Movie) using the values provided.
  2. Save the entity to the database.
  3. Get the entity from the database.
  4. Verify that the fetched instance matches the original.

At a minimum, each entity type should have a simple Persistence test, such as the one shown previously. More information about the Fluent NHibernate Persistence tester can be found on their wiki at

See also

  • Testing with the SQLite in-memory database
  • Using the Ghostbusters test



Please enter your comment!
Please enter your name here