dunit有一个可以选择使用jcl产生堆栈跟踪。想法是,每当有一个例外,或试验失败后, dunit将显示堆栈跟踪的权利,随着失败的讯息。唯一的问题是,它是行不通的。
有没有问题越来越堆栈跟踪突发例外。这实在是十分有益的;你的地址,单位名称,方法名称,甚至电话号码的路线投掷一个例外,再加上调用堆栈,导致代码获得所谓的。极大地有用。
问题是,你不得到同样的事,试验失败,这种失败-即使失败,而且c heckequals,甚至d unitlite的s pecify.that,经营,投掷例外(他们了自己的异常处理类, e testfailure) 。你应该可以得到堆栈跟踪显示,确切的代码行载未能断言。事实上,我们正在使用的旧版本dunit和jcl在工作中,我们得到堆栈跟踪刚才的罚款。
不幸的是,堆栈跟踪测试的失败是打破默认情况下,在最新版本的dunit和jcl 。但也有希望-注意,我说: “默认” 。下面,我会告诉你如何修复默认。
使dunit堆栈跟踪
首先,这里的如何获得dunit显示堆栈跟踪摆在首位。
您需要下载的源代码都dunit和杰迪代码库。 (最新版本的Delphi的船舶与旧版本的dunit ,但我只是测试,这与最新版本) 。
添加dunit , jcl , jcl \共同的, jcl \在Windows目录到您的项目的搜索路径。
然后进行下列变更在项目> “选项:
对目录/条件的网页,设置“有条件的定义” : use_jedi_jcl
对链接的网页,设置了“地图档案”到“详细” 。
现在写测试,经过一个意想不到的例外,编译和运行。以下是contrived的例子,但它会给您一个想法是什么,它看起来就像这样:
enabing堆栈跟踪试验失败,这种失败
我们并没有得到意想不到的例外,在我们的测试,很多时候。更经常地,它的试验失败,这种失败。当我们有一个以上的断言,在同样的测试(不理想,但它发生了很多) ,有时很难知道哪些断言失败。或者更确切地说,它总是很容易知道,如果你有堆栈跟踪。
问题是,与jcl的排除清单。最新版本的jcl保持一个可配置的清单例外类型,它不应该产生堆栈跟踪。好像一个合理的功能。但jcl和dunit队取得了三个重要的设计决定,在各点在时间:
jcl的排除清单,默认情况下,包含一个班级: eabort 。
jcl忽略不只是课堂时间是在排除清单,但其任何阶级的后代,以及。
dunit的etestfailure降,从… yep ,你猜, eabort 。
把所有的三种软件结合起来,和东西是行不通的。
但是,所有说,人们很容易的工作。刚才下面的代码添加到您的项目文件之前,您呼叫其中的runregisteredtests套路:
以下为引用的内容:
uses
...,
JclDebug,
...;
begin
...
JclDebug.RemoveIgnoredException(EAbort);
...
end.
这就是堆栈跟踪.
有没有问题越来越堆栈跟踪突发例外。这实在是十分有益的;你的地址,单位名称,方法名称,甚至电话号码的路线投掷一个例外,再加上调用堆栈,导致代码获得所谓的。极大地有用。
问题是,你不得到同样的事,试验失败,这种失败-即使失败,而且c heckequals,甚至d unitlite的s pecify.that,经营,投掷例外(他们了自己的异常处理类, e testfailure) 。你应该可以得到堆栈跟踪显示,确切的代码行载未能断言。事实上,我们正在使用的旧版本dunit和jcl在工作中,我们得到堆栈跟踪刚才的罚款。
不幸的是,堆栈跟踪测试的失败是打破默认情况下,在最新版本的dunit和jcl 。但也有希望-注意,我说: “默认” 。下面,我会告诉你如何修复默认。
使dunit堆栈跟踪
首先,这里的如何获得dunit显示堆栈跟踪摆在首位。
您需要下载的源代码都dunit和杰迪代码库。 (最新版本的Delphi的船舶与旧版本的dunit ,但我只是测试,这与最新版本) 。
添加dunit , jcl , jcl \共同的, jcl \在Windows目录到您的项目的搜索路径。
然后进行下列变更在项目> “选项:
对目录/条件的网页,设置“有条件的定义” : use_jedi_jcl
对链接的网页,设置了“地图档案”到“详细” 。
现在写测试,经过一个意想不到的例外,编译和运行。以下是contrived的例子,但它会给您一个想法是什么,它看起来就像这样:

enabing堆栈跟踪试验失败,这种失败
我们并没有得到意想不到的例外,在我们的测试,很多时候。更经常地,它的试验失败,这种失败。当我们有一个以上的断言,在同样的测试(不理想,但它发生了很多) ,有时很难知道哪些断言失败。或者更确切地说,它总是很容易知道,如果你有堆栈跟踪。
问题是,与jcl的排除清单。最新版本的jcl保持一个可配置的清单例外类型,它不应该产生堆栈跟踪。好像一个合理的功能。但jcl和dunit队取得了三个重要的设计决定,在各点在时间:
jcl的排除清单,默认情况下,包含一个班级: eabort 。
jcl忽略不只是课堂时间是在排除清单,但其任何阶级的后代,以及。
dunit的etestfailure降,从… yep ,你猜, eabort 。
把所有的三种软件结合起来,和东西是行不通的。
但是,所有说,人们很容易的工作。刚才下面的代码添加到您的项目文件之前,您呼叫其中的runregisteredtests套路:
我们并没有得到意想不到的例外,在我们的测试,很多时候。更经常地,它的试验失败,这种失败。当我们有一个以上的断言,在同样的测试(不理想,但它发生了很多) ,有时很难知道哪些断言失败。或者更确切地说,它总是很容易知道,如果你有堆栈跟踪。
问题是,与jcl的排除清单。最新版本的jcl保持一个可配置的清单例外类型,它不应该产生堆栈跟踪。好像一个合理的功能。但jcl和dunit队取得了三个重要的设计决定,在各点在时间:
jcl的排除清单,默认情况下,包含一个班级: eabort 。
jcl忽略不只是课堂时间是在排除清单,但其任何阶级的后代,以及。
dunit的etestfailure降,从… yep ,你猜, eabort 。
把所有的三种软件结合起来,和东西是行不通的。
但是,所有说,人们很容易的工作。刚才下面的代码添加到您的项目文件之前,您呼叫其中的runregisteredtests套路:
| 以下为引用的内容: uses ..., JclDebug, ...; begin ... JclDebug.RemoveIgnoredException(EAbort); ... end. |
