unit-testing - Fluent NHibernate PersistenceSpecification 无法测试字符串集合

标签 unit-testing nhibernate 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"); }
}

当我使用 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/

相关文章:

c# - NHibernate3 查询与 QueryOver

nhibernate - 如何确保使用 MassTransit Saga 将项目添加到 NHibernate 持久化 IList 的良好性能

c# - 如何获取 NHibernate 中的连接标准计数

nhibernate - 表 Y 中的关联引用未映射的类 : Y - C# NHibernate

nhibernate - 在不创建额外列的情况下映射外键以及 NHibernate 中的引用

python - 断言不相等的相同数据帧 - Python Pandas

iOS - 如何区分 UI 和单元测试,以及如何在这种具体情况下使用它们?

java - 转储 "real-world"场景以进行单元测试

unit-testing - grails 2.5.5单元测试中的java8日期

c# - 使用 CaSTLe Active Record 与 Straight NHibernate 的优缺点是什么?