使自定义控件在 TestComplete 中更具可测试性

Posted

技术标签:

【中文标题】使自定义控件在 TestComplete 中更具可测试性【英文标题】:Making a custom control more testable in TestComplete 【发布时间】:2010-07-01 08:01:35 【问题描述】:

(这在 TestComplete 论坛中可能会更好,但我想我还是会在这里试一试)

我们正在研究使用 TestComplete 对我们的 Delphi 2010 应用程序进行自动化测试。我们的应用程序使用的主要控件是我们自己的自定义控件,它直接派生自 TCustomControl

(作为参考,该控件就像一个图表工具,其中显示带有文本的框。可以选择这些框。该控件是完全自定义绘制的,包括选择)。

我们正在努力使其对 TestComplete 更加友好,以便我们可以从中读取数据(例如,将哪些数据加载到控件中,选择了哪些数据)

我还应该提到,我们的应用程序使用 MVC 架构并大量使用接口。 TestCompletes 调试代理似乎无法返回有关接口的任何类型信息,因此我们无法从中获取任何数据。我怀疑这是我们问题的根源

我正在考虑这两种方法:

    向控件添加新属性,该属性将返回有关当前选定框的信息。例如框中的文本、屏幕上的位置、分层路径,并通过 TestCompletes 调试代理访问它们。

    看看为 TestComplete 创建一个自定义控件插件(我什至不确定你可以用 Delphi 控件做到这一点)

第一种方法的问题是,如果不使用属性和函数,链接器通常会删除它们。我们希望使用我们的发布版本进行测试,而不是调试版本。

有人对此有什么建议或经验吗?

谢谢

编辑:我刚刚阅读了 SDK 帮助,并且只能为 .net 和 WPF 控件创建自定义控件插件。

【问题讨论】:

【参考方案1】:

您对调试信息的看法是正确的 - 您可以将其从发布版本中删除。因此,您将测试发布版本并同时访问内部。 关于这种情况的说明:“如果不使用属性和函数,链接器通常会删除它们。”您可以在此处作弊以使链接器为这些功能生成调试信息:

    发布功能。链接器不会触及已发布的元素。 使功能虚拟化。链接器不排除虚拟方法。 在代码中的某处调用函数。要在代码中包含调用而不实际调用任何内容,您可以执行以下操作:
var t:布尔值; 开始 t := 错误; 如果 t = True 那么 TheFunctionThatNeverExecutes(); ... 结尾;

【讨论】:

【参考方案2】:

您应该重新考虑使用发布版本进行测试的决定。原因是 TestComplete 需要一些魔法来让您的测试生活更轻松,而您不希望这种魔法出现在发布版本中。因此,如果您可以详细说明不使用调试版本进行测试的原因,我们可以尝试找到解决方案来撤销此决定。如果您只显示 TestComplete 的所有可用功能,结果可能是您将有权访问您的控件的所有相关数据。

现在回到最初的问题:您可以通过创建一些包装这些接口的特殊类来克服接口问题,从而使属性在 TestComplete 中可用。

创建一个小的(可能是不可见的)测试表单,您可以在其中集中访问这些类的实例。 (现在是发布模式链接)只在调试模式下创建这个表单,所以在精心设计时,您只在需要测试时链接相关代码。

【讨论】:

使用发布版本的几个原因:1。这是为了我们希望在客户将获得的相同构建上进行的功能测试。发布版本和调试版本之间可能存在细微的行为差异,例如调试版本可能会跳过许可检查。 2. 根据 TestComplete 7 的帮助,您可以使用发布配置构建您的应用程序,还包括 td32 信息。然后,您可以使用 striptds.exe 实用程序将调试信息删除到其自己的文件中。你关于包装接口的建议很有趣,我会看看。

以上是关于使自定义控件在 TestComplete 中更具可测试性的主要内容,如果未能解决你的问题,请参考以下文章

使自定义容器可迭代

如何使自定义 UIView 可访问?

如何在 swift 中使自定义 UITableViewCell 中的链接可点击

如何使自定义部分可执行(.text 除外)

如何在 ME51n tcode 中的项目级别上使自定义字段可编辑?

如何使自定义对象可迭代?