Question

Lorsque j'essaie le JustMock suivant :

var mockedField = Mock.CreateLike<Field>(field => field.DisplayName == "Test Display");

J'obtiens l'erreur suivante :

   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)

Cela semble être dû au fait qu'il tente de convertir la classe "Field" en chaîne.Le "ToString" de la classe "Field" est écrasé par une logique qui ne fonctionnera pas dans l'environnement de test.Alors, naturellement, j'ai essayé de remplacer la méthode "ToString" pour toutes les instances de Field :

var fieldMocker = Mock.Create<Field>();
Mock.Arrange(() => fieldMocker.ToString()).IgnoreInstance().Returns("Override To String");

J'ai vérifié que cela fonctionne lorsque je crée des instances de "Field", mais pour une raison quelconque, le "ToString" d'origine est appelé lorsque j'essaie de configurer le Mock.

Des idées?

Était-ce utile?

La solution

Le field.ToString() dans ce cas, il s'agit d'un appel au sein de la DMZ, ou de la zone dé-mockerisée.Les dispositions que vous avez prises ne sont donc pas respectées.Cela ressemble définitivement à un bug, j'ai donc enregistré le problème.

Merci d'avoir signalé le bug.Malheureusement, je ne peux vous proposer aucune solution de contournement (sauf ne pas utiliser CreateLike pour l'instant), je vais donc le réparer dès que possible.

Mise à jour:la correction du bug est enregistré.Il sera officiellement disponible dans la version JustMock 2015 Q1 ou dans une version interne antérieure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top