Domanda

Quando tento il seguente Justmock:

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

ottengo il seguente errore:

   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)
.

Questo sembra essere perché sta tentando di lanciare la classe "campo" come una stringa.La "tostring" della classe "campo" viene sovrascritta con la logica che non funzionerà nell'ambiente di test.Quindi, naturalmente ho provato a sovrascrivere il metodo "Tostring" per tutte le istanze del campo:

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

Ho verificato che funziona quando creo istanze di "campo", ma per qualche motivo la "tostring" originale viene chiamata quando tento di configurare il mock.

Qualche idea?

È stato utile?

Soluzione

Il field.ToString() in questo caso si presenta per essere chiamato all'interno della DMZ o della zona de-mockerized.Quindi, le disposizioni che hai fatto non sono rispettate.Sembra sicuramente un bug, quindi ho registrato il problema.

Grazie per aver segnalato il bug.Sfortunatamente, non posso offrirti alcun workaround (tranne per non usare CreateLike per ora), quindi potrò sistemarlo al più presto.

Aggiornamento: la correzione del bug è controllato in .Sarà reso ufficialmente disponibile nella versione Justmock 2015 Q1 o una build interna prima di questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top