SqlFunctions.StringConvert
静的メソッドであるため、モックオブジェクトを返すように指示することはできません。ただし、そのためのインターフェイスを作成して、ファサードクラスを作成することはできます。
そのようなインターフェースを作成し、必ず属性を含めてください
public interface ISqlFunctions
{
[System.Data.Entity.Core.Objects.DataClasses.EdmFunction("SqlServer", "STR")]
string StringConvert(Decimal? number);
}
次に、ファサードクラスを作成します。これは、Linq toEntityに実行させたいことをすべて実行する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();
}
Entity Frameworkは、で使用されたのと同じ方法でインターフェイスの属性を使用しSqlFunctions.StringConvert(decimal?)
ます。
単体テストでは、テスト対象のシステムにファサードクラスまたはインターフェイスのモックを提供できます。