'Class'"使用FakeItEasy测试Fluent NHibernate时出现错误

本文关键字:错误 NHibernate FakeItEasy Class quot 使用 测试 Fluent | 更新日期: 2023-09-27 18:01:30

我正在写一些持久性测试,但我得到一个错误,NHibernate似乎不能与FakeItEasy的假工作。具体错误是:

No persister for: Castle.Proxies.FacilityProxy

如果我像下面这样写测试,它会正常工作并通过

    [Test]
    public void CanCorrectlyCreateFacilityTable()
    {
        new PersistenceSpecification<Facility>(session, new DataEqualityComparer())
            .CheckProperty(f => f.Id, 1)
            .CheckProperty(f => f.Name, _facility.Name)
            .CheckReference(f => f.Owner, new Client())
            .VerifyTheMappings();
    }

但是,如果我创建一个假的:

        IClient _client;
        _client = A.Fake<Client>();
        A.CallTo(() => _client.Name).Returns("Preston");

并将其传递给测试-它似乎失败了,上面的错误:

    [Test]
    public void CanCorrectlyCreateFacilityTable()
    {
        new PersistenceSpecification<Facility>(session, new DataEqualityComparer())
            .CheckProperty(f => f.Id, 1)
            .CheckProperty(f => f.Name, _facility.Name)
            .CheckReference(f => f.Owner, _client)
            .VerifyTheMappings();
    }

有没有人知道,如果有一个变通或可能的错误在我的结束?

我在这里做了一些研究,但似乎没有发现这个问题已经被问到。大多数人似乎关心的是FakeItEasy的配置或NHibernate的配置——这似乎不是问题所在:我如何测试Nhibernate的扩展方法,即使在fakeiteasy中指定返回后也不返回值?我可以合理地模拟这个NHibernate查询吗?

'Class'"使用FakeItEasy测试Fluent NHibernate时出现错误

我不是NHibernate用户,所以可能没有多大帮助。你可能已经知道你看到这种行为的原因是FakeItEasy通过使用Castle创建了Fakes。Core的DynamicProxy类正在创建一个全新的类,该类扩展了伪造的类(或实现了伪造的接口)。

你没有提供Client类的定义,但我猜它的某些成员是Facility类型的,所以当…属性(我猜)是为了持久化对象而访问的,返回值是FacilityProxy类型,NHibernate不知道该怎么处理它。

在我看来,我可以合理地模拟这个NHibernate查询接受的答案?有正确的想法:使用您想要持久化的实际类型的对象进行测试。

如果你不满意,我想我唯一能建议的是:

  1. 配置Facility类型的属性(再次,我假设是一个属性)以返回实际的Facility(并且可能对其他成员的分类这样做),或者
  2. 教NHibernate关于FacilityProxy的知识,尽管这可能很难。我不知道NHibernate,但因为你没有访问类在编译时,它可能是棘手的