Свободный Nhibernate System.ApplicationException: для свойства 'Id' ожидалось '1' типа 'System.Int32', но получено '2' типа 'System.Int32' - PullRequest
0 голосов
/ 06 июля 2010

Привет, я пишу юнит-тесты для беглого Nhibernate, когда я запускаю тест в изоляции, он проходит, но когда я запускаю несколько тестов. или запустите тест более одного раза, и он начнет давать сбой с сообщением ниже 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")

}

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Свойство Id является идентификатором базы данных, поэтому оно увеличивается с каждой вставкой в ​​таблицу. Какой-то другой тест также вставляет UserProfile, поэтому значение идентификатора увеличивается до 2 для этой вставки. Я бы просто проверил, что свойство Id не равно 0, при условии, что это его значение по умолчанию.

0 голосов
/ 08 июля 2010

Я бы предложил протестировать ваши сопоставления с помощью базы данных в памяти, чтобы вы могли изолировать только эти сопоставления. Если вы используете базу данных в памяти, вы можете поместить FluentConfiguration в метод [TestInitialize] (MSTest) или [SetUp] (NUnit), и база данных будет создаваться с нуля (в памяти) каждый раз. Вот пример:

[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] 
public 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, которую вы можете найти здесь: http://sqlite.phxsoftware.com/

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...