流畅的NHibernate PersistenceSpecification无法测试字符串集合

Bra*_*bby 6 nhibernate unit-testing fluent-nhibernate

我正在使用Fluent NHibernate映射一个包含如下字符串集合的类:

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

当我使用PersistenceSpecificationFNH包中包含的类编写单元测试时,它会失败:

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

NHibernate.MappingException: No persister for: System.String调用时会抛出此测试CheckList().但是,如果我试着自己坚持这个对象,它就可以了.

[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
}
Run Code Online (Sandbox Code Playgroud)

为什么第一个单元测试失败了?

Jak*_*art 3

在这种情况下,CheckComponentList 方法可能是正确的方法:

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

这段代码对我来说效果很好(NH 3.1,FNH 1.2)。希望这有帮助。