Unit tests for Fluent Nhibernate mappings

2019-03-31 00:09发布

I'm trying to get a feel for how the rest of the community tests their Fluent Nhibernate mappings. So let's say I have the following mappings:

    public UserHeaderMap()
    {
        Table("USER_HEADER");
        Id(x => x.Id, "USER_ID");
        Map(x => x.LoginName, "LOGIN_NAME");
        Map(x => x.UserPassword, "USER_PASSWORD");
        Map(x => x.UserEmail, "USER_EMAIL");
        Map(x => x.UserLanguage, "USER_LANGUAGE");
        Map(x => x.UserEnabled, "USER_ENABLED");

        HasManyToMany(x => x.Groups)
            .Table("USER_GROUP_COMPOSITE")
            .ParentKeyColumn("USER_ID")
            .ChildKeyColumn("GROUP_ID")
            .Cascade.All()
            .Inverse();
    }

public class GroupHeaderMap : ClassMap<GroupHeader>
{
    public GroupHeaderMap()
    {
        Table("GROUP_HEADER");
        Id(x => x.Id, "GROUP_ID");
        Map(x => x.Name, "GROUP_NAME");
        Map(x => x.Description, "GROUP_DESCRIPTION");

        HasManyToMany(x => x.Users)
            .Table("USER_GROUP_COMPOSITE")
            .ParentKeyColumn("GROUP_ID")
            .ChildKeyColumn("USER_ID");
    }
}

What all unit tests would you write for these? Would you use PersistenceSpecification class to unit test these?

Edit:

I want to use SqlLite but what if I'm not generating my schema from my mappings? Can I still load my schema into SqlLite somehow? Also I'm wondering if testing SqlLite is really enough. Our product needs to run on at least MS SQL and Oracle. Will testing only on a SqlLite database meet my requirements? Also do you usually test each and every entity that you have mapped (Constructors, Properties, etc)?

1条回答
看我几分像从前
2楼-- · 2019-03-31 01:03

Fluent nhibernate has build-in testing methods. With them you can do the following

[Test]
public void CanCorrectlyMapEmployee()
{
    new PersistenceSpecification<Employee>(session)
        .CheckProperty(c => c.Id, 1)
        .CheckProperty(c => c.FirstName, "John")
        .CheckProperty(c => c.LastName, "Doe")
        .VerifyTheMappings();
}

This test will

  • create an Employee instance
  • insert the Employee into the database
  • retrieve the record into a new Employee instance
  • verify the retrieved Employee matches the original

This will check property mappings.

Also I would suggest to use SqlLite and test real SQL queries in memory to verify cascading rules.

查看更多
登录 后发表回答