2010-09-24 10 views
6

Używam Fluent NHibernate do mapowania aa klasę, która posiada kolekcję strun tak:Fluent NHibernate PersistenceSpecification nie można przetestować zbiór ciągów

public class Foo { 
    public virtual ICollection<string> Strings { get; set; } 
} 
public class FooMap : ClassMap<Foo> { 
    public FooMap() { HasMany(f => f.Strings).Element("SomeColumnName"); } 
} 

Kiedy piszę badanej jednostki przy użyciu klasy PersistenceSpecification zawarte w pakiecie FNH, to nie:

[TestMethod] 
public void CanMapCollectionOfStrings() { 
    var someStrings = new List<string> { "Foo", "Bar", "Baz" }; 
    new PersistenceSpecification<Foo>(CurrentSession) 
     .CheckList(x => x.Strings, someStrings) // MappingException 
     .VerifyTheMappings(); 
} 

to badanie rzuca NHibernate.MappingException: No persister for: System.String dzwoniąc CheckList(). Jednakże, jeśli próbuję utrzymywać obiekt samodzielnie, to działa dobrze.

[TestMethod] 
public void CanPersistCollectionOfStrings() { 
    var foo = new Foo { 
        Strings = new List<string> { "Foo", "Bar", "Baz" }; 
       }; 

    CurrentSession.Save(foo); 
    CurrentSession.Flush(); 
    var savedFoo = CurrentSession.Linq<Foo>.First(); 
    Assert.AreEqual(3, savedFoo.Strings.Count()); 
    // Test passes 
} 

Dlaczego test pierwszego urządzenia kończy się niepowodzeniem?

+0

Nie wiem czy widzieliście to, ktoś doniósł podobny problem - http://groups.google.com/group/nhusers/browse_thread/thread/d9f68bd2048a8f60/e20398a71c9b79c2 – WorldIsRound

Odpowiedz

3

metoda CheckComponentList jest chyba właściwa droga w tym przypadku:

var someStrings = new List<string> { "Foo", "Bar", "Baz" }; 
new PersistenceSpecification<Foo>(CurrentSession) 
    .CheckComponentList(x => x.Strings, someStrings) 
    .VerifyTheMappings(); 

Ta praca dobrze dla mnie kod (NH 3.1 FNH 1.2). Mam nadzieję, że to pomoże.

+0

ten pracował dla mnie (NH 3,3 FNH 1.3) – Oosterman