我正在使用 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"); }
}
当我使用
PersistenceSpecification
编写单元测试时FNH 包中包含的类,它失败了:[TestMethod]
public void CanMapCollectionOfStrings() {
var someStrings = new List<string> { "Foo", "Bar", "Baz" };
new PersistenceSpecification<Foo>(CurrentSession)
.CheckList(x => x.Strings, someStrings) // MappingException
.VerifyTheMappings();
}
这个测试抛出
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
}
为什么第一个单元测试失败?
最佳答案
在这种情况下,CheckComponentList 方法可能是正确的方法:
var someStrings = new List<string> { "Foo", "Bar", "Baz" };
new PersistenceSpecification<Foo>(CurrentSession)
.CheckComponentList(x => x.Strings, someStrings)
.VerifyTheMappings();
这段代码很适合我(NH 3.1,FNH 1.2)。希望这有帮助。
关于unit-testing - Fluent NHibernate PersistenceSpecification 无法测试字符串集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3790100/