你不能告诉SqlFunctions.StringConvert
返回一个模拟对象,因为它是一个静态方法。但是您可以为它创建一个接口并创建一个外观类。
像这样创建一个界面并确保包含属性
public interface ISqlFunctions
{
[System.Data.Entity.Core.Objects.DataClasses.EdmFunction("SqlServer", "STR")]
string StringConvert(Decimal? number);
}
然后编写你的外观类。这应该是您希望 Linq to Entity 做的任何事情的 C# 方式。
public class SqlFunctionsFacade : ISqlFunctions
{
public string StringConvert(decimal? number)
{
return number?.ToString();
}
}
在您的实现中,在您的 linq 查询中使用您的接口
public SomethingOrOther(ISqlFunctions sqlFunctions)
{
var convertError = models
.Where(x => sqlFunctions.StringConvert((decimal?)(x.convert ?? 0)) == "0")
.Any();
}
实体框架将使用接口上的属性,其方式与在SqlFunctions.StringConvert(decimal?)
.
在你的单元测试中,你可以为你的被测系统提供你的外观类或接口的模拟。