gpt4 book ai didi

c# - 是否可以对依赖于 NHibernate 分离条件的方法进行单元测试?

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:09 24 4
gpt4 key购买 nike

我曾尝试使用 Moq 在使用 DetachedCriteria 类的存储库上对方法进行单元测试。但是我遇到了一个问题,即我实际上无法模拟内置在内部的内部 Criteria 对象。有什么方法可以模拟分离条件吗?

测试方法

        [Test]
[Category("UnitTest")]
public void FindByNameSuccessTest()
{
//Mock hibernate here
var sessionMock = new Mock<ISession>();
var sessionManager = new Mock<ISessionManager>();
var queryMock = new Mock<IQuery>();
var criteria = new Mock<ICriteria>();
var sessionIMock = new Mock<NHibernate.Engine.ISessionImplementor>();

var expectedRestriction = new Restriction {Id = 1, Name="Test"};

//Set up expected returns
sessionManager.Setup(m => m.OpenSession()).Returns(sessionMock.Object);
sessionMock.Setup(x => x.GetSessionImplementation()).Returns(sessionIMock.Object);

queryMock.Setup(x => x.UniqueResult<SopRestriction>()).Returns(expectedRestriction);

criteria.Setup(x => x.UniqueResult()).Returns(expectedRestriction);

//Build repository
var rep = new TestRepository(sessionManager.Object);

//Call repostitory here to get list
var returnR = rep.FindByName("Test");


Assert.That(returnR.Id == expectedRestriction.Id);
}

存储库类

public class TestRepository
{
protected readonly ISessionManager SessionManager;

public virtual ISession Session
{
get { return SessionManager.OpenSession(); }
}

public TestRepository(ISessionManager sessionManager)
{
}


public SopRestriction FindByName(string name)
{

var criteria = DetachedCriteria.For<Restriction>().Add<Restriction>(x => x.Name == name)
return criteria.GetExecutableCriteria(Session).UniqueResult<T>();
}

请注意,我在这里也使用“NHibernate.LambdaExtensions”和“CaSTLe.Facilities.NHibernateIntegration”。任何帮助将不胜感激。

本质上,我在返回对象的断言上得到一个空引用异常。因此,我假设我没有正确连接标准。但我不认为我可以这样做,因为该标准是在我的存储库中创建的分离标准的私有(private)字段!

最佳答案

老实说,很久以前我就放弃了尝试对涉及数据库的任何内容进行单元测试。

启动内存中的 Sqlite 数据库并运行实际测试要容易得多。或者,如果您更愿意针对真实数据库运行它们,那么只需将它们移动到您的集成测试中,这些测试仅在您 checkin 源代码控制时运行。

关于c# - 是否可以对依赖于 NHibernate 分离条件的方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3022290/

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