【发布时间】:2016-08-09 23:19:56
【问题描述】:
我正在编写一些持久性测试,但收到一个错误,表明 NHibernate 似乎无法与 FakeItEasy 的假货一起使用。具体错误是:
没有持久性: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 的配置——这似乎不是问题: How do I test extension method of Nhibernate which does not return the value even after specifying return in fakeiteasy? Can I sensibly mock this NHibernate query?
【问题讨论】:
-
我已经有一段时间没有使用
PersistenceSpecification测试了,但是如果我没记错的话,确保与数据库的集成设置正确不是重点吗?如果是这样,您为什么需要伪造/模拟被测实体? -
@AndrewWhitaker 类中的一些属性我更愿意保持受保护而不是公开。模拟班级似乎是更优雅的解决方案,但根据布莱尔在下面的回答,我认为我必须只使用班级本身。感谢您的帮助!
标签: c# unit-testing nhibernate fluent-nhibernate fakeiteasy