2

我刚刚从 SVN 下载了 DUnit2 代码库。有人编译成功了吗?为了编译它,我必须遵循哪些步骤/先决条件?有人知道是否存在已经编译的版本吗?

谢谢你

法比奥维莱

4

3 回答 3

4

项目目录中,找到与您的 Delphi 版本对应的子目录。在其中,您应该找到一个项目组文件,即DUnit2ProjectGroup.bpgDUnit2ProjectGroup.bdsgroupDUnit2Delphi <version> .groupproj。打开它并按顺序编译所有项目。

使用 DUnit2 与使用 DUnit几乎相同。

于 2012-06-25T14:40:57.867 回答
4

万一其他人在尝试使 DUnit2 在 Delphi XE(或 XE5)上运行时偶然发现这个问题:

TL;博士:

Dunit2(官方 SourceForge 源代码,修订版 101)目前(截至 2015 年 6 月 1 日撰写本文时)不能在 Delphi XE 或 XE5 上成功构建。

要使其在 XE 或 XE5 上构建,请获取我在此处发布的补丁

将其应用于源代码树。它现在应该可以编译,您应该能够打开 .groupproj 并成功构建所有包含的项目。

该补丁可以使用 TortoiseSVN 应用并使用 TortoiseSVN 创建(以防万一)。

更长的版本:

令人惊讶的是今晚(2015-06-01)我遵循与 Fabio 相同的步骤(在 2012 年不少于)并遇到完全相同的问题(E2010 不兼容类型:'指针'和'整数')试图编译 DUnit2(修订版 101 主干在 XE 和 XE5 上直接从 SourceForge 签出。

我得出以下结论:

1) XE 和 XE5 的头部修订存在多个问题。

2) Fabio 提到的上述关键问题可以通过将 IntPtr 替换为 Pointer 来解决。

据我所知,这实际上似乎对代码没有任何影响,并且在此更改之后,测试套件在 XE 和 XE5 上也都通过了良好的测试,尽管需要注意的是——我也没有看得太仔细(并且也受到以下警告。)

3) 项目搜索路径已过期 [XE]。只需要更新/修复。

4) 缺少 XE5 和其他的 $DEFINES,尽管其他一些代码非常了解 XE5

5) XE 上没有的一些增强的 TRect 东西。(对于内联到将编译并且在 XE 上可用的更基本的表达式,数量相对较小且相对微不足道,因此绝不会停止。)

(关于 3,4 和 5 —— 遗憾的是,我觉得代码库没有针对多个编译器/BDS 目标进行很好的测试。)

6) 某种 Application.OnIdle/GUI 测试错误(运行 T_TGUITestCase 测试以查看它),除非您通过移动鼠标或按下 shift 键来触发应用程序,否则 GUI 自动化测试将阻塞,除非您继续“输入”Windows 消息队列.OnIdle 事件(在我的 Windows 8 XE5 和 XE 二进制文件上可重复)。

现在从我脑海中浮现出来,从多年前的模糊记忆中,我似乎记得以前遇到过这种情况,这归结为前一段时间在 Delphi 或 Windows 中的行为发生了微妙的变化。- 过去的 IIRC,过去的情况是,即使系统上没有其他任何事情发生,即使您将 Done 设置为 True,实际上仍然会在您的 Delphi 应用程序中偶尔收到 Application.OnIdle() 调用. 我记得,由于几年前 Windows 或 Delphi 的变化(不记得是哪个),这种情况在某些时候发生了变化,如果你不希望你的应用程序完全进入睡眠状态。无论如何,今晚(在撰写本文时)DUnit 代码在我的 PC 上显然是/现在是一个问题,所以我不得不修补它。

我这样做可以说是一种相当笨拙的方式,例如通过在运行 GUI 自动化测试时提供 OnIdle 处理程序来处理事情,以表明应用程序实际上没有完成(例如“不要阻塞,不要进入睡眠状态” ),然后立即恢复任何先前的处理程序。毫无疑问,有一个更优雅的解决方案,也许是通过向我们自己发布一条消息来保持应用程序“活着”,但我第一次或 2 次尝试更好的东西并没有成功,我也没有足够的兴趣去追求这个更远。不过,我很想听到更好的解决方法。

于 2015-06-01T23:16:33.773 回答
1

我提供了补丁,但没有从 SourceForge 上的 DUnit2 团队得到任何反馈。所以我将带有完整提交历史的 DUnit2 分叉到我的 Github 帐户中。我在那里应用了许多修复程序,包括 XE 和 XE3+ 的编译问题以及如果没有发生鼠标操作就会暂停的可编写脚本的自检。我将在我的 Github 帐户 [ https://github.com/graemeg/dunit2 ] 上继续开发 DUnit2。

于 2017-12-15T13:28:07.403 回答