2014-01-30 47 views
4

因此,使用Sitecore进行测试。这是一个特殊的话题,我已经发现了许多关于它的阅读材料。 (Sitecore开发第8章,Alistair Deneys blog,NextDigital blog,iStern blog,......),但在大多数情况下,它们都会使用NUnit和自定义测试运行器等......对我来说最有用的(对我来说) iStern blog使用Microsoft Fakes嘲笑Sitecore。但是这真的是要走的路吗?使用Sitecore 7和TFS 2012的TDD CI

我很惊讶,Hedgehog TDS系统能够与TFS集成得如此之深,并且能够在Sitecore开发中完成CI,因此没有更多关于如何利用此系统设置由TFS执行的固体测试然而)。

我们正在筹备一个大型新项目,该项目现在使用Sitecore处理前端用户交互,其中使用的数据比WCF服务落后95%。所以这部分可以很容易地测试和TDD开发。这是最后的5%(可悲的是包括最高业务价值,即在线支付),它位于Sitecore内,需要进行测试。 我们可以有足够的关于sitecore的亲密知识来嘲笑它吗?我会倾向于不去考虑......如果是这样,那么我们如何才能在我们的TFS CI构建中针对sitecore运行确定性测试?

最后但并非最不重要的,我得到的是目前被发现的信息是有点过时的可能(马利梅看到在NextDigital blog的言论)的感觉,确实Sitecore的7层新的方法来解决这个问题?

对于那些谁愿意看到更多的作为哲学而不是一个技术问题:只能有一个答案,这就是用微软测试框架,能够方法的技术准确的定义在TFS CI环境中运行以测试为Sitecore编写的代码。

+1

不是一个答案特别,但如果你没碰到过这样的研究中来,这是值得一读。 http://kevinobee.wordpress.com/2013/03/14/testing-strategies/在Sitecore 7之前略写,但与Sitecore员工相关。 –

+0

我发现你的最后一个斜体的段落与问题的其余部分混淆和矛盾。您是否在寻找关于Sitecore实现的单元测试的一般建议,或者您是否要求提供使用Sitecore的Microsoft Fakes的指导?如果是后者,为什么iStern博客文章不够? –

+0

@BenGolden斜体更多的意思是表明我不是在煽动讨论什么是最好的。我正在寻找的是执行我的要求的方法,并对我迄今发现的信息进行了完整性检查。 – IvanL

回答

3

微软是否要走这条路?在我看来,没有。微软的假货可以让你测试那些设计不可测试的代码。如果你正确地设计你的解决方案,一个标准的模拟框架应该是足够的。

我们可以有足够的关于sitecore的亲密知识来嘲笑它吗?这是一个狡猾的问题。除非第三方库专门为它设计,并且是一种您认为是“稳定依赖”的东西,否则您不应该试图嘲笑它。相反,用自己的类和抽象来包装它,并嘲笑它们。

看看Synthesis和Glass Mapper。它们是对象映射框架,允许您在保持页面编辑器支持的同时将Sitecore项目映射到界面。 Glass,特别是有一个可以模拟的Sitecore.Context的包装。综合应该是相当可测试的,但我还没有尝试过。

使用这些映射框架和良好的SOLID设计之一,您应该能够使大部分代码可测试。请记住,解决方案边缘的类应该足够简单,不需要测试。

+0

我知道玻璃框架,但还没有合成,所以我今天要看看它。谢谢你的信息。 – IvanL

3

几周前,我和你的情况完全相同,IvanL。我想测试我的一些业务逻辑,而不是使用模拟框架来对付Sitecore 7。我设法做到了,但只是在一个非常具体的情况下。不幸的是,我还没有发布我的原型解决方案或幻灯片解释它,但我会解释我所做的基本知识。

在Sitecore 7中,向Sitecore.ContentSearch命名空间查询索引并使用LINQ打开了一个方法,可以非常容易地用假索引数据进行单元测试。

这里有一些单元测试的例子,正如你所看到的那样,它使用了嘲讽框架。但是,他们模拟的课程实际上很容易让你自己假装出来。如果您实施了ISearchIndex,那么您实际上只需实施CreateSearchContext方法即可开始返回IQueryable以在您的测试中使用。

要实施CreateSearchContext,您可能需要创建一个伪造的提供商搜索上下文实现,该实现将执行GetQueryable实现。

一旦你建立了这两个类,你基本上已经覆盖了你的'索引'。在其上添加一个属性,您可以从单元测试中设置数据收集,然后确保上下文返回该数据收集。

这会让你建立一个虚拟索引,用你想要的任何数据POCO,然后将它传递给运行你的业务数据的标准提供者实现。

需要记住的一件大事是,这只适用于您可能正在编写的任何代码,这些代码将使用新的Sitecore 7使用LINQ和IQueryable实现的方式。使用Sitecore.Data.Item API运行的较旧风格的代码仍然适用于以前的方式,并具有和以前相同的局限性。

更新:我提到的原型是现在可供下载:http://blog.nonlinearcreations.com/2014/02/sitecore-7-developers-quest-successful-unit-testing/

+0

这就是我从NextDigital博客收集到的。我期待在您发布它们时看到您的原型和幻灯片。 – IvanL

+0

嗨@IvanL,原型现已发布:http://blog.nonlinearcreations.com/2014/02/sitecore-7-developers-quest-successful-unit-testing/ –