Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 使自定义控件在TestComplete中更易于测试_Delphi_Delphi 2010_Testcomplete - Fatal编程技术网

Delphi 使自定义控件在TestComplete中更易于测试

Delphi 使自定义控件在TestComplete中更易于测试,delphi,delphi-2010,testcomplete,Delphi,Delphi 2010,Testcomplete,(这在TestComplete论坛中可能更好,但我想我还是在这里试一试) 我们希望通过TestComplete对我们的Delphi 2010应用程序进行自动化测试。我们的应用程序使用的主控件是我们自己的自定义控件,它直接派生自TCustomControl (作为参考,该控件类似于一个数字化工具,显示包含文本的框。可以选择这些框。该控件完全是自定义绘制的,包括所选内容) 我们希望使这个TestComplete更加友好,这样我们就可以从中读取数据(例如,哪些数据加载到控件中,哪些数据被选中) 我还应

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

我们希望通过TestComplete对我们的Delphi 2010应用程序进行自动化测试。我们的应用程序使用的主控件是我们自己的自定义控件,它直接派生自TCustomControl

(作为参考,该控件类似于一个数字化工具,显示包含文本的框。可以选择这些框。该控件完全是自定义绘制的,包括所选内容)

我们希望使这个TestComplete更加友好,这样我们就可以从中读取数据(例如,哪些数据加载到控件中,哪些数据被选中)

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

我正在考虑这两种方法:

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

  • 看看如何为TestComplete创建一个自定义控件加载项(我甚至不确定您是否可以用Delphi控件实现这一点)

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

    有没有人对此有什么建议或经验

    谢谢


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

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

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


    创建一个小的(可能是不可见的)测试表单,在这里集中访问这些类的实例。(现在是发布模式链接)仅在调试模式下创建此表单,因此,经过仔细设计后,您仅在测试需要时链接相关代码。

    关于调试信息,您是对的-您可以将其从发布版本中删除。因此,您将测试一个发布版本,同时可以访问内部构件。
    关于这种情况的注意事项:“链接器通常会删除未使用的属性和函数。”您可以在此处作弊,使链接器为这些函数生成调试信息:

  • 发布函数。链接器不接触已发布的元素
  • 使函数虚拟化。链接器不排除虚拟方法
  • 在代码中的某个地方调用函数。要在代码中包含调用而不实际调用任何内容,可以执行以下操作:
  • var t:布尔型; 开始 t:=假; 如果t=True,则 永不执行的函数(); ... 结束;
    使用发布版本的两个原因:1。这是为了我们的功能测试,我们希望在客户将获得的相同构建上进行测试。发布版本和调试版本之间可能存在细微的行为差异,例如调试版本可能会跳过许可证检查。2.根据TestComplete 7帮助,您可以使用发布配置构建应用程序,但也可以包含td32信息。然后,您可以使用striptds.exe util将调试信息删除到自己的文件中。你关于包装接口的建议很有趣,我来看看。 var t: Boolean; begin t := False; if t = True then TheFunctionThatNeverExecutes(); ... end;