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