JUSTMOCK: Bella per esempio Esempio Valutazione della tostring
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?
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.