首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理FromSqlInterpolated?

如何管理FromSqlInterpolated?
EN

Stack Overflow用户
提问于 2021-06-04 17:10:51
回答 1查看 82关注 0票数 0

请帮助模拟上下文中的FromSqlInterpolated方法。我有一个简单的方法:

代码语言:javascript
复制
public List<UserTag> PrintUserTag(string userId)
    {
        return this.context.UserTag.FromSqlInterpolated($"ctc_sp_UserTag {userId}").ToList();
    }

我写了一个测试:

代码语言:javascript
复制
[Fact]
    public void UserTagTest_ReturnsSuccessResult()
    {
        string userId = "7C8FFA01-94FC-42EA-9C43-5CA7FD0400D1";

        List<UserTag> userTags = new List<UserTag>()
        {
            new UserTag()
            {
                Id = userId,
                UserTagName = "TestName",
                // ..... and others lines
            }
        };

        var mockDbSet = userTags.AsDbSetMock();
        mockContext.Setup(x => x.UserTags).Returns(mockDbSet.Object);
        mockContext.Setup(a =>
                a.Set<UserTag>().FromSqlInterpolated<UserTag>(It.IsAny<FormattableString>())).Returns(mockDbSet.Object);

        var actual = this.repo.PrintUserTag(userId);

        Assert.NotNull(actual);
        // And other Asserts
    }

并收到此异常:

代码语言:javascript
复制
Message: 
System.NotSupportedException : Unsupported expression: ... => ....FromSqlInterpolated<UserTags>(It.IsAny<FormattableString>())
Extension methods (here: RelationalQueryableExtensions.FromSqlInterpolated) may not be used in setup / verification expressions.

我如何模拟或重写这行代码:

代码语言:javascript
复制
mockContext.Setup(a =>
                a.Set<UserTag>().FromSqlInterpolated<UserTag>(It.IsAny<FormattableString>())).Returns(mockDbSet.Object);
EN

回答 1

Stack Overflow用户

发布于 2021-06-06 15:47:11

你不能直接模拟FromSqlInterpolated作为它的扩展方法。它在幕后调用DbSet<T> queryable提供程序上的CreateQuery<T>

如果您不想设置集成测试,可以使用EntityFrameworkCore.Testing库,我是它的作者。如果你想自己尝试模拟它,我很乐意为你指出你需要的代码,但我需要知道你使用的EFCore版本是什么,因为实现方式不同。

集成测试与模拟是一个固执己见的话题。我同意微软的建议,你不应该模拟DbContext -它是一个复杂的依赖,你不拥有它,很难在模拟中模拟它的行为。一般来说,我使用内存中的提供程序,根据我的经验,它是一个可靠的伪提供程序,但它不能进行关系操作。

我将关系操作视为我可以控制的众所周知的依赖项--它们通常是我的存储过程或函数,我拥有它们--所以使用提到的库模拟它们没有问题。它们仍然需要在某些时候进行测试,但至少这样我有选择。

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

https://stackoverflow.com/questions/67834597

复制
相关文章

相似问题

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