gpt4 book ai didi

delphi - 在delphi中访问其他.exe数据的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-03 18:27:44 24 4
gpt4 key购买 nike

我尝试使用 Delphi 2010 附带的 DUnit 对 1000 万个 LOC 项目实现一些基本的自动化测试,这些项目不遵循良好的 OO 实践(例如:将业务逻辑隔离到类/单元中)。我不能做正常的单元由于业务逻辑的每个部分都分布在数十个相互依赖的单元中,因此对该项目进行测试,这些单元“组”以某些“主要业务逻辑屏幕”为中心(例如:所有与发票逻辑相关的单元都集中在主发票屏幕),并且由于这些屏幕是类,我可以进行“主要业务逻辑屏幕类测试”而不是单元测试,但是这些“主屏幕”仍然需要在流程启动期间创建的很多东西。

所以我需要两者:

  • 能够运行坏项目的启动东西
  • 能够访问其对象

  • 坏项目已经有一些导出的函数返回指针,我可以转换它们来访问它的对象,但我无法以任何一种方式调用它们:

    如果我将坏项目创建为测试进程的子进程,启动代码运行良好,但如果没有复杂的 IPC 方法或对坏项目的结构进行实质性更改,我找不到调用导出函数的方法。

    如果我像 LoadLibrary 函数一样将坏项目的 .exe 作为 dll 加载,调用坏项目导出的任何函数都会导致访问冲突和/或段错误,即使是这个简单的过程:
    procedure Test; {safecall;} {stdcall;}
    begin
    showmessage('Yay!');
    end;

    我怎样才能做到这两点?

    最佳答案

    您正在谈论的方法(使用导出的函数)不会成功。两个 Win32 程序之间最简单的通信形式是让它们使用 SendMessage 或 PostMessage 相互通信。定位窗口句柄(通常通过窗口类名)是第 1 步,发送消息是第 2 步。

    其次,DUnit 离目标还很远,而且 TTestCase 不能巧妙地扩展为 GUI Controller ,因为这不是它的用途。它用于单元测试。圆钉,方孔。为您可以配置和测试的类编写 TTestCases,并使用 DUnit 为您可以为其提供测试覆盖的系统部分提供测试覆盖。

    对于 UI 测试,请使用完全独立的框架。 Delphi 程序员为您提议的那种自动化集成测试采用了两种基本方法。

  • 一个自定义的黑客工作。这就是你所描述的。在 Embarcadero 内部,有一个名为 Zombie 的框架。 ,这是 Nick 在 2007 年发表的博客。它的方法基于几种“原始 IPC”,通常涉及从程序外部到程序内部控件的窗口句柄的 Win32 SendMessage 或 PostMessage 窗口消息。然而,内部代码被显着修改以允许僵尸测试。不,你不能拥有 Teh Codez,它们是 Embarcadero 内部和专有的。但它确实说明该方法确实有效,并且不需要重写整个应用程序或编写大量模拟类,如单元测试
    会做。如果您想走 hack 路线,您将编写自己的用户界面测试框架,它可能应该完全独立于并且不使用 DUnit 代码。欢迎您尝试,但我告诉您,这是严重的阻抗不匹配。如果我在 2013 年开始自己的自定义框架,它将基于 DCOM,因为 Delphi DCOM 服务器代码可以简单地有条件地编译成许多程序,并且 DCOM 会为您处理函数调用“编码”细节。我怀疑我会在该项目中投入一年,然后我会放弃,因为最后,我怀疑我能否使任何系统(基于 DCOM 或 Win32 消息)得到返回。
  • 一个完整的外部测试工具,您可以在其中编写测试脚本,例如 AutomatedQA/SmartBear TestComplete。您的测试不会被编译成 delphi 测试程序,而是在 TestComplete 中运行,类似 Pascal 的脚本语法只是编写测试脚本的可用选项之一。
  • 关于delphi - 在delphi中访问其他.exe数据的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694560/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com