微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#实体框架内存数据库如何在单元测试中跳过或测试标量函数

如何解决C#实体框架内存数据库如何在单元测试中跳过或测试标量函数

我的实体上下文中有以下 DbFunction

[DbFunction("fn_Replicate")]
public static string Replicate(string padChar,int patternLength,string value) => throw new Exception;

sql Server 函数

CREATE FUNCTION [dbo].[fn_Replicate]
    (@ReplicateChar CHAR(1) = '0',@PatternLength INT,@FieldValue NVARCHAR(10))
RETURNS NVARCHAR(10)
AS
BEGIN
    DECLARE @Result NVARCHAR(10)

    SELECT @Result = REPLICATE(@ReplicateChar,@PatternLength - LEN(@FieldValue)) + @FieldValue

    RETURN @Result
END

在我的 C# 代码中:

    if (query.Any(usr => OrganisationContextNew.Replicate("0",(EmployeNumberPatternLength - usr.PersonNumber.Length),usr.PersonNumber) ==
                              OrganisationContextNew.Replicate("0",(EmployeNumberPatternLength - employeeNumber.Length),employeeNumber)
                            && usr.CompanyCode.Code.Equals(companyCode,StringComparison.OrdinalIgnoreCase)))

我正在使用内存数据库,当我运行单元测试时,它因函数而失败并抛出上下文中定义的新异常。

我的测试设置是:

    [SetUp]
    public virtual void Setup()
    {
        _fixture = new Fixture().UseDefaultBehaviors(skipNonPrimitiveMembers: true);

        var options = new DbContextOptionsBuilder<OrganisationContextNew>()
            .UseInMemoryDatabase(Guid.NewGuid().ToString())
            .Options;
        _context = new OrganisationContextNew(options);
    }

谁能帮我解决这个问题?

它适用于以下实现:

    [DbFunction("fn_Replicate")]
    public static string Replicate(char padChar,string value) 
    {
        var padLength = patternLength - value.Length;

        return padLength >= 0 ? value : value.PadLeft(padLength,padChar);
    }

解决方法

    [DbFunction("fn_Replicate")]
    public static string Replicate(char padChar,int patternLength,string value) 
    {
        var padLength = patternLength - value.Length;

        return padLength >= 0 ? value : value.PadLeft(padLength,padChar);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。