0 votes

Fluent Nhibernate System.ApplicationException : Pour la propriété 'Id', on attendait '1' de type 'System.Int32' mais on a obtenu '2' de type 'System.Int32'

Bonjour, j'écris des tests unitaires pour fluent Nhibernate, lorsque j'exécute le test en isolation, il passe, mais lorsque j'exécute des tests multiples ou que j'exécute le test plus d'une fois, il commence à échouer avec le message suivant System.ApplicationException : Pour la propriété 'Id', on s'attendait à '1' de type 'System.Int32' mais on a obtenu '2' de type 'System.Int32'.

[ p {

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

}

1voto

Jamie Ide Points 28680

La propriété Id est une identité de base de données, elle est donc incrémentée à chaque insertion dans la table. Un autre test insère également un UserProfile, la valeur de l'identité est donc incrémentée à 2 pour cette insertion. Je vérifierais simplement que la propriété Id n'est pas égale à 0, en supposant qu'il s'agit de sa valeur par défaut.

0voto

Brandon Satrom Points 1545

Je vous suggère de tester vos mappings à l'aide d'une base de données en mémoire afin de pouvoir isoler ces tests des mappings uniquement. Si vous utilisez une base de données en mémoire, vous pouvez placer la FluentConfiguration dans la méthode [TestInitialize] (MSTest) ou [SetUp] (NUnit), et la base de données sera créée à partir de zéro (en mémoire) à chaque fois. Voici un exemple :

[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);  
}  

Votre test devrait alors fonctionner correctement à chaque fois que vous l'exécutez :

[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")  
} 

Vous devrez utiliser SQLite dans ce scénario, ainsi que la DLL System.Data.SQLite, que vous pouvez trouver ici : http://sqlite.phxsoftware.com/

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X