在测试中使用基于 UserPart 的部件
Posted
技术标签:
【中文标题】在测试中使用基于 UserPart 的部件【英文标题】:using UserPart based Parts in testing 【发布时间】:2014-11-25 21:14:20 【问题描述】:我正在为数据映射编写一些测试,这些测试采用包含 UserPart 的 ContentItem。当我尝试在我的单元测试中使用它并分配电子邮件属性时,我收到 InfoSet 错误。我该如何模拟一些东西,以便在没有数据库的情况下正确填充 InfoSet?
当我尝试使用 Bertrand 的 ContentHelpers 时,一旦我尝试设置 UserPart 的 Email 属性,我就会收到以下信息:
System.Reflection.TargetException 发生 HResult=-2146232829 Message=非静态方法需要一个目标。 Source=mscorlib 堆栈跟踪: 在 System.Reflection.RuntimeMethodInfo.CheckConsistency(对象目标) 在 System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(对象 obj, BindingFlags invokeAttr,Binder binder,Object[]参数, CultureInfo文化) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] 参数, CultureInfo文化) 在 System.Reflection.RuntimePropertyInfo.SetValue(对象 obj,对象值,对象 [] 索引) 在 Orchard.ContentManagement.InfosetHelper.Store[TPart,TRecord,TProperty](TPart contentPart, Expression`1 targetExpression, TProperty value) in .....Orchard.Source.1.8\src\Orchard\ContentManagement\InfosetHelper.cs:line 122 内部异常:
使用示例:
ContentItem usrItem = ContentHelpers.PreparePart(new UserPart(), "User") ;
UserPart usrPart = usrItem.As<UserPart>();
usrPart.Email = "test@tester.com";
显示 ContentHelpers 的 Bertrand 博客文章链接:http://weblogs.asp.net/bleroy/faking-orchard-content-items-for-testing
【问题讨论】:
这很奇怪,看起来记录是空的。你能附加一个调试器并检查一下吗? 【参考方案1】:正如@Bertrand Le Roy 在他的评论中所建议的那样,记录是空的。
您正在像这样构建您的内容项:
ContentItem usrItem = ContentHelpers.PreparePart(new UserPart(), "User");
如果您将其与 Bertrand 在他的博客中描述该过程的方式进行比较,您会注意到除了创建 BodyPart
之外,他还创建了它的底层 BodyPartRecord
。这是必需的,因为支持Parts
的数据,如BodyPart
和UserPart
将它们的大部分功能委托给底层PartRecord
。
要解决您的问题,您只需更改构建内容项的方式以包括基础记录的构建:
ContentItem usrItem = ContentHelpers.PreparePart(new UserPart
Record = new UserPartRecord()
, "User");
【讨论】:
谢谢!这似乎工作正常。很抱歉错过了这一点。以上是关于在测试中使用基于 UserPart 的部件的主要内容,如果未能解决你的问题,请参考以下文章
我可以在基于模型的 QListView 中使用自定义小部件作为视图吗?
如何在颤动中为 CachedNetworkImage 编写小部件测试