次の JustMock を試みると:
var mockedField = Mock.CreateLike<Field>(field => field.DisplayName == "Test Display");
次のエラーが表示されます。
at Sitecore.Data.Fields.Field.GetValue(Boolean allowStandardValue, Boolean allowDefaultValue)
at Sitecore.Data.Fields.Field.get_Value()
at Sitecore.Data.Fields.Field.ToString()
at System.Linq.Expressions.ExpressionStringBuilder.VisitConstant(ConstantExpression node)
at System.Linq.Expressions.ConstantExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionStringBuilder.OutMember(Expression instance, MemberInfo member)
at System.Linq.Expressions.ExpressionStringBuilder.VisitMember(MemberExpression node)
at System.Linq.Expressions.MemberExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionStringBuilder.VisitLambda[T](Expression`1 node)
at System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionStringBuilder.ExpressionToString(Expression node)
at System.Linq.Expressions.Expression.ToString()
at Telerik.JustMock.Core.ExpressionUtil.ConvertMockExpressionToString(Expression expr)
at Telerik.JustMock.Core.MocksRepository.Arrange[TMethodMock](Expression expr, Func`1 methodMockFactory)
at Telerik.JustMock.Mock.<>c__DisplayClassa`1.<Arrange>b__8()
at Telerik.JustMock.Core.ProfilerInterceptor.GuardInternal[T](Func`1 guardedAction)
at Telerik.JustMock.Mock.Arrange[TResult](Expression`1 expression)
at Telerik.JustMock.Expectations.ReturnArranger.ArrangeReturn[T](Expression`1 callPattern, LambdaExpression returnValueExpr)
これは、「Field」クラスを文字列としてキャストしようとしていることが原因のようです。「Field」クラスの「ToString」は、テスト環境では機能しないロジックで上書きされます。したがって、当然、Field のすべてのインスタンスに対して "ToString" メソッドをオーバーライドしようとしました。
var fieldMocker = Mock.Create<Field>();
Mock.Arrange(() => fieldMocker.ToString()).IgnoreInstance().Returns("Override To String");
「フィールド」のインスタンスを作成すると動作することを確認しましたが、モックをセットアップしようとすると、何らかの理由で元の「ToString」が呼び出されています。
何か案は?