gpt4 book ai didi

unit-testing - 使用 FakeItEasy 伪造一个 nHibernate session

转载 作者:行者123 更新时间:2023-12-02 07:46:48 25 4
gpt4 key购买 nike

我想使用 FakeItEasy 将一个伪造的 nHibernate session 注入(inject)到我的存储库中,然后返回一个在我的测试中预定义的对象列表。有没有人有这方面的经验?

这是示例测试:

[TestFixture]
public class ProductionRepositoryTester
{
private ProductionRepository _productionRepository;

[SetUp]
public void SetupFixture()
{
const string propertyNumber = "123";
Tank tank = new Tank { PropertyNumber = propertyNumber };

var session = A.Fake<ISession>();
var sessionFactory = A.Fake<ISessionFactory>();

A.CallTo(session).WithReturnType<IList<Tank>>().Returns(new List<Tank> { tank });

_productionRepository = new ProductionRepository(session, sessionFactory);
}

[Test]
public void ProductionRepositoryCanGetTanks()
{
var tanks = _productionRepository.GetTanks();

Assert.AreNotEqual(0, tanks.Count(), "Tanks should have been returned.");

}
}

这里是实际 ProductionRepository 类中的调用:

public IEnumerable<Tank> GetTanks()
{
var tanks = Session.CreateCriteria(typeof(Tank)).List<Tank>();
return tanks;
}

提前感谢您的任何建议!

最佳答案

首先,我建议不要伪造 NHibernate 接口(interface),这(在我看来)级别太低,无法进行单元测试。对这些场景进行一些集成测试可能会更好。换句话说,对所有与 ProductionRepository (IProductionRepository) 抽象的交互进行单元测试,但到此为止。然而,现在这只是我的意见,如果你真的想这样做,我认为你必须改变你的假设置:

session 返回一个条件,而不是直接返回一个 IList。因此你也必须有一个假的标准:

var fakeCriteria = A.Fake<ICriteria>();

A.CallTo(fakeCriteria).WithReturnType<IList<Tank>>().Returns(new List<Tank> { tank });

A.CallTo(session).WithReturnType<ICriteria>().Returns(fakeCriteria);

(我希望我没记错标准类型,我认为是 ICriteria 但我不是百分百确定。)

关于unit-testing - 使用 FakeItEasy 伪造一个 nHibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com