Testing 如何自动测试Tridion模板(使用TOM.NET)

Testing 如何自动测试Tridion模板(使用TOM.NET),testing,tridion,Testing,Tridion,我在模板化项目时经常遇到问题。除了在TemplateBuilder中运行模板之外,我无法用任何其他方式测试我的工作。如果我正在处理一个在几个不同模板上使用的TBB,这是一个主要问题,因为这意味着在更改TBB中的代码后,我应该重新测试所有模板(可能使用几个不同的页面/组件,因为根据内容可能会有稍微不同的情况) 正如您在大型项目中看到的,TBB被重用了很多,由于需要大量的测试,更改它们需要花费大量的时间,我非常希望找到解决方案。我知道,在当前的TOM.NET中,单元测试几乎是不可能的(大多数类/方法

我在模板化项目时经常遇到问题。除了在TemplateBuilder中运行模板之外,我无法用任何其他方式测试我的工作。如果我正在处理一个在几个不同模板上使用的TBB,这是一个主要问题,因为这意味着在更改TBB中的代码后,我应该重新测试所有模板(可能使用几个不同的页面/组件,因为根据内容可能会有稍微不同的情况)

正如您在大型项目中看到的,TBB被重用了很多,由于需要大量的测试,更改它们需要花费大量的时间,我非常希望找到解决方案。我知道,在当前的TOM.NET中,单元测试几乎是不可能的(大多数类/方法都是内部的),那么有什么替代方法可以实现自动化测试呢

我研究过的一个解决方案是使用核心服务来启动带有一些测试内容的模板的呈现过程,然后检查输出是否如预期的那样,但实现这一点需要大量代码,因此会产生不必要的开销(我认为这仍然比手动重新测试用例花费更少的时间)。此外,除非您(以编程方式)使用单个TBB(或TBB的子集)创建单独的模板,否则这实际上不允许您测试单个TBB。此解决方案的好处是,您可以在开发时在本地笔记本电脑上运行测试,前提是您可以连接到Tridion服务器(在运行测试之前,您仍然需要将代码上载到Tridion,因此这不是完全理想的解决方案)

我知道另一种选择是使用DD4T/CWA,因为模板(通常)非常简单,所以您可以在前端处理所有测试


还有其他想法吗?

我对CoreService场景有一些经验。您只需要编写一些帮助程序来上载模板、创建复合模板并运行它。然而,棘手的部分是验证

您需要编写一些测试模板来帮助您进行验证。一种方法是编写.Net模板,将预期值传递给该模板,它将执行验证。另一种方法是编写DreamWeaver模板,该模板将打印来自包的值,然后您将根据预期值对其进行检查。此方法的优点是,这些值将作为CoreService呈现操作的结果返回给您,您可以在客户端执行所有验证


但最困难的部分是数据集的创建。这可能会占用您的大部分时间。

您可以尝试将大部分代码隔离在可以进行单元测试的类中

我想这里的主要问题是引擎和包装是密封的,所以你不能轻易地模拟它们。但是您可以最小化与这些对象的交互,将代码的内容放在类中,这些类接受相关的输入并返回应该放在包中的输出等


我认为通过这种方法,您可以从单元测试中获得大量TBB的覆盖率。

在一个客户那里,我看到了一个实现,其中测试调用了模板生成器使用的相同Web服务,他们使用这些Web服务来执行模板、评估结果等


可能值得探索。

我建议您编写自己的TestRunner,目标有两个:创建测试数据和运行测试

创建测试数据:其思想是创建一个示例数据集(所有字段、一些字段,并且仅自动创建必填字段)。(使用Chuck Norris quotes而非lorem ipsum获得额外积分)。示例内容的标题使用类似[TestContent]的命名方案和/或位于其自己的文件夹中,并附加元数据(稍后查找)

创建测试页面:查找测试内容。使用GetListUsingItems查找使用模板的页面。复制页面,并将其粘贴到TestContent StructureGroup中,保存。打开页面,添加测试内容,删除其他内容,并使用特殊命名模式保存页面


运行测试:找到测试内容,预览每个内容,写出报告,报告呈现时间、成功状态和字符数。

我同意重点是自动化测试,而不是单元测试(毕竟,单元测试主要是面向对象编程)。Tridion的工作就是转换数据。测试数据转换所需的是拥有已知的输入,并能够对输出做出断言。多年来,我尝试了各种方法,但迄今为止最有效的方法是:

1) 对于每个模板,将测试内容保存在专用文件夹中,将测试页面保存在专用结构组中。内容是测试的输入,除非测试需求发生更改,否则不会更改内容。 2) 将组件放在页面上。发布页面。保持简单:您通常可以为单个测试场景创建一个页面。如果有帮助,您可以自动发布页面。 3) 使用web测试工具验证输出。这可能是HtmlUnit、Selenium或其他什么

基本上,Tridion是执行转换的引擎。这一部分不需要专门的测试执行引擎,尽管使用一个引擎测试输出是有用的


模仿这个软件包听起来很吸引人,但正如维萨所说,这可能会变成一项巨大的工作。我所概述的简单方法在实践中是有效的,并在一个重要的项目中得到了验证。如果你愿意的话,你可以在这个主题上添加一些变化:我曾经考虑过一件事,但在项目中从未做过,那就是使用蓝图来给你更多的隔离。例如,您可以通过本地化组件模板来测试页面模板,以生成静态和可预测的组件表示。只要你从单元测试方法的束缚中解脱出来,就足够有创造力的范围。

< P>我完全考虑你的问题。