首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnitTesting PatIndex

UnitTesting PatIndex
EN

Stack Overflow用户
提问于 2015-08-25 08:45:54
回答 1查看 330关注 0票数 0

当使用模拟的PatIndex对象对SqlFunctions的IQueryable进行单元测试时,我得到以下错误:

“此函数只能从LINQ实体调用。”

下面是我如何初始化模拟存储库:

代码语言:javascript
复制
protected void InitUnitOfWork<TEntity>(IEnumerable<TEntity> data)
    where TEntity : class
{
    var dataSet = Substitute.For<IDbSet<TEntity>, IQueryable<TEntity>>().Initialize(data.AsQueryable());
    var query = Substitute.For<IRepositoryQuery<TEntity>>();
    var repository = Substitute.For<IRepository<TEntity>>();

    this.UnitOfWork.Repository<TEntity>().Returns(repository);
    repository.Query().Returns(query);
    query.Include(null).ReturnsForAnyArgs(query);
    query.Filter(null).ReturnsForAnyArgs(query);
    query.Get().Returns(dataSet);
}

这是我正在尝试测试的方法:

代码语言:javascript
复制
public IEnumerable<ContactDto> GetContactsBySearchText(string searchText)
{
    var companyId = CurrentUser.User.CurrentCompany.Id;

    var contacts = this.GetIQueryableContacts().Where(x => x.CompanyMasterData.Id == companyId);

    if (!string.IsNullOrWhiteSpace(searchText))
    {
        var pattern = SearchQueryParserHelper.ParseString(searchText.Trim());
        contacts = contacts.Where(x => SqlFunctions.PatIndex(pattern, x.Name) > 0
            || SqlFunctions.PatIndex(pattern, x.Code) > 0
            || SqlFunctions.PatIndex(pattern, x.Phone) > 0);
    }

    return Mapper.Map<IQueryable<Contact>, IEnumerable<ContactDto>>(contacts);
}

我知道我可以通过使用数据库来解决这个问题,但是如何才能正确地模拟它呢?

我使用NSubstitute作为模拟框架。

诚挚的问候

丹尼尔

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 11:27:06

使用Microsoft.QualityTools.Testing.Fakes.dll (以下是关于如何使用它的链接:MSDN)

稍后生成用于System.Data.Entity.SqlServer.dll的伪造组件

按照using语句包装单元测试方法的主体:

代码语言:javascript
复制
using (Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create())
{
     // Setup Shim function for PatIndex:
     System.Data.Entity.SqlServer.FakesShimSqlFunctions.PatIndexStringString = (pattern, target) => 
     {
        // Implement PatIndex function here
        throw new NotImplementedException();
     }

     // Your Unit test code goes here
}

一旦您为PatIndex提供了一个Shim (您可以调用它作为替换),您将能够成功地对目标方法进行单元测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32199458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档