문제

다음과 같은 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)
.

"필드"클래스를 문자열로 캐스팅하려고 시도하기 때문입니다."필드"클래스의 "toString"은 테스트 환경에서 작동하지 않는 논리로 덮어 씁니다.따라서 자연스럽게 필드의 모든 인스턴스에 대해 "tostring"메소드를 무시하려고 시도했습니다.

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

필자는 "필드"의 인스턴스를 작성할 때 작동하는지 확인했지만, 어떤 이유로 든 가동을 설정하려고 할 때 원래의 "tostring"이 호출됩니다.

아이디어가 있습니까?

도움이 되었습니까?

해결책

이 경우의 field.ToString()는 DMZ 또는 De-Mockerized 영역에서 호출되는 것입니다.따라서 당신이 만든 준비는 존중되지 않습니다.그것은 확실히 버그처럼 보이므로 문제를 기록했습니다.

버그를보고 해 주셔서 감사합니다.불행히도, 나는 당신에게 어떤 해결 방법을 사용할 수 없습니다 (지금 CreateLike를 사용하지 않는 것 제외). 그래서 그것을 최대한 빨리 해결할 수 있습니다.

업데이트 : 버그 수정은 에서 확인되었습니다.JustMock 2015 Q1 릴리스 또는 내부 빌드에서 공식적으로 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top