JustMock:通过示例ToString评估模拟

时间:2014-02-25 00:13:11

标签: c# justmock

当我尝试以下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");

我在创建“Field”实例时验证它正在工作,但由于某种原因,当我尝试设置Mock时,会调用原始的“ToString”。

任何想法?

1 个答案:

答案 0 :(得分:0)

在这种情况下,field.ToString()碰巧在DMZ或De-Mockerized Zone内被调用。因此,您所做的安排不受尊重。它肯定看起来像一个bug,所以我记录了这个问题。

感谢您报告错误。不幸的是,我不能为你提供任何解决方法(除了暂时不使用CreateLike),所以我会尽快修复它。

更新:错误修复程序为checked in。它将在JustMock 2015 Q1版本或之前的内部版本中正式提供。