'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查询吗?
我不是NHibernate
用户,所以可能没有多大帮助。你可能已经知道你看到这种行为的原因是FakeItEasy通过使用Castle创建了Fakes。Core的DynamicProxy类正在创建一个全新的类,该类扩展了伪造的类(或实现了伪造的接口)。
你没有提供Client
类的定义,但我猜它的某些成员是Facility
类型的,所以当…属性(我猜)是为了持久化对象而访问的,返回值是FacilityProxy
类型,NHibernate不知道该怎么处理它。
在我看来,我可以合理地模拟这个NHibernate查询接受的答案?有正确的想法:使用您想要持久化的实际类型的对象进行测试。
如果你不满意,我想我唯一能建议的是:
- 配置
Facility
类型的属性(再次,我假设是一个属性)以返回实际的Facility
(并且可能对其他成员的分类这样做),或者 - 教NHibernate关于
FacilityProxy
的知识,尽管这可能很难。我不知道NHibernate,但因为你没有访问类在编译时,它可能是棘手的