Fluent Nhibernate System.ApplicationException:对于属性'Id',期望'System'类型为'System'的'1',但是'System'的类型为'System'。

时间:2010-07-06 18:55:56

标签: asp.net-mvc fluent-nhibernate

您好我正在为流利的Nhibernate编写单元测试,当我在isloation中运行测试时它会通过,但是当我运行多个测试时。或者多次运行测试它开始失败时出现以下消息System.ApplicationException:对于属性'Id',期望'1'类型为'System.Int32'但是得到'2'类型'System.Int32'

[TextFixture] public void Can_Correctly_Map_Entity(){

    new PersistenceSpecification<UserProfile>(Session)
        .CheckProperty(c => c.Id, 1)
        .CheckProperty(c => c.UserName, "user")
        .CheckProperty(c => c.Address1, "Address1")
        .CheckProperty(c => c.Address2, "Address2")

}

我得到了一个似乎有意义的解决方案Fluent Nhibernate System.ApplicationException : For property 'Id' expected '1' of type 'System.Int32' but got '2' of type 'System.Int32',但我不知道如何使用它,因为解释模糊

1 个答案:

答案 0 :(得分:0)

您是在针对内存数据库还是物理数据库进行测试?我建议使用内存数据库测试您的映射,以便您可以将这些测试隔离到仅测试映射。如果使用内存数据库,则可以将FluentConfiguration放在[TestInitialize](MSTest)或[SetUp](NUnit)方法中,并且每次都将从头开始创建db。这是一个例子:

[TestInitialize] 
public void PersistenceSpecificationTest() 
{ 
    var cfg = Fluently.Configure() 
        .Database(SQLiteConfiguration.Standard.InMemory().UseReflectionOptimizer()) 
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserProfile>()) 
        .BuildConfiguration(); 

    _session = cfg.BuildSessionFactory().OpenSession(); 
    new SchemaExport(cfg).Execute(false, true, false, _session.Connection, null); 
} 

然后,每次运行时,您的测试都可以正常运行:

[TestMethod]
pulic void CanMapUserProfile()
{
    new PersistenceSpecification<UserProfile>(_session)    
        .CheckProperty(c => c.Id, 1)    
        .CheckProperty(c => c.UserName, "user")    
        .CheckProperty(c => c.Address1, "Address1")    
        .CheckProperty(c => c.Address2, "Address2") 
}

您需要在此方案中使用SQLite以及System.Data.SQLite DLL,您可以在此处找到它:http://sqlite.phxsoftware.com/

希望有所帮助。