【发布时间】:2013-02-04 20:00:06
【问题描述】:
我尝试使用 Delphi 2010 附带的 DUnit 对一个 1000 万个 LOC 项目实施一些基本的自动化测试,这些项目不遵循良好的 OO 实践(例如:将业务逻辑隔离到类/单元中)。我不能对该项目进行正常的单元测试,因为业务逻辑的每个部分都分布在数十个相互依赖的单元中,但是这些单元“组”以某些“主要业务逻辑屏幕”为中心(例如:所有与发票逻辑相关的单元都是以主发票屏幕为中心),并且由于这些屏幕是类,因此我可以进行“主要业务逻辑屏幕类测试”而不是单元测试,但是这些“主屏幕”仍然需要在流程启动期间创建的大量内容。
所以我需要两者:
- 能够运行不良项目的启动内容
- 能够访问其对象
糟糕的项目已经有一些导出的函数,它们返回指针,我可以强制转换以访问它的对象,但我无法调用它们:
如果我将坏项目创建为测试进程的子进程,启动代码运行良好,但如果没有复杂的 IPC 方法或对坏项目的结构进行实质性更改,我找不到调用导出函数的方法。
如果我像 LoadLibrary 函数一样将坏项目的 .exe 作为 dll 加载,调用坏项目导出的任何函数都会导致访问冲突和/或段错误,即使是这个简单的过程:
procedure Test; {safecall;} {stdcall;}
begin
showmessage('Yay!');
end;
我怎样才能做到这两点?
【问题讨论】:
-
如果你不能编写代码在被测进程中运行,那么你需要IPC。
标签: delphi ipc automated-tests dunit