2010-07-06 9 views
0

Salut J'écris des tests unitaires pour Nhibernate fluide, quand je cours le test en isloation ça passe, mais quand je fais plusieurs tests. ou exécutez le test plus d'une fois il commence à échouer avec le message ci-dessous System.ApplicationException: Pour la propriété 'Id' attendu '1' de type 'System.Int32' mais '2' de type 'System.Int32'Fluent Nhibernate System.ApplicationException: Pour la propriété 'Id' attendu '1' de type 'System.Int32' mais '2' de type 'System.Int32'

[TextFixture] Can_Correctly_Map_Entity public void() {

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

}

Répondre

0

Je vous suggère de tester vos mappages à l'aide d'une base de données en mémoire afin de pouvoir isoler ces tests des mappages uniquement. Si vous utilisez une base de données en mémoire, vous pouvez placer FluentConfiguration dans la méthode [TestInitialize] (MSTest) ou [SetUp] (NUnit), et la base de données sera créée à partir de rien (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); 
} 

Ensuite, votre test devrait fonctionner correctement à chaque fois que vous 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 aurez besoin d'utiliser SQLite dans ce scénario, ainsi que la DLL System.Data.SQLite, que vous pouvez trouver ici: http://sqlite.phxsoftware.com/

Hope that helps.

1

la propriété Id est une identité de base de données il est incrémenté à chaque insertion à la table. Un autre test insère également un UserProfile afin que la valeur d'identité soit incrémentée à 2 pour cet insert. Je voudrais simplement vérifier que la propriété Id n'est pas égale à 0, en supposant que c'est sa valeur par défaut.