在测试中使用基于 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 的数据,如BodyPartUserPart 将它们的大部分功能委托给底层PartRecord

要解决您的问题,您只需更改构建内容项的方式以包括基础记录的构建:

ContentItem usrItem = ContentHelpers.PreparePart(new UserPart  
                                                     Record = new UserPartRecord() 
                                                 , "User");

【讨论】:

谢谢!这似乎工作正常。很抱歉错过了这一点。

以上是关于在测试中使用基于 UserPart 的部件的主要内容,如果未能解决你的问题,请参考以下文章

我可以在基于模型的 QListView 中使用自定义小部件作为视图吗?

如何在颤动中为 CachedNetworkImage 编写小部件测试

使用小部件测试在滑块中选择值

在 Flutter 中使用 Flutter Driver 对 OTPTextField 小部件进行集成测试

如何在 Flutter 小部件测试中等待未来完成?

北航成果面向航空关键部件性能测试的 多维力加载装置