我正在使用Delphi XE,我有一个包含主应用程序和DUnit测试应用程序的项目组.我不时会去DUnit测试应用程序添加一些测试并运行现有测试.
一些测试代码生成由应用程序处理的异常,但由Delphi Debugger多次显示,因为我习惯使用F9快捷方式运行测试应用程序,就像我使用标准应用程序一样:在这种情况下,这不是很方便.
我知道在没有调试的情况下运行的SHIFT+ CTRL+ F9快捷方式,当我记得使用它时这很好但是我经常发现自己打F9,然后咕,然后关闭测试应用程序,然后点击SHIFT+ CTRL+ F9.多么浪费时间.
所以我的问题是:有更好的方法吗?我可以定义一些设置或使用某些专家来默认运行该特定应用程序而无需调试吗?当然,我不是唯一一个遇到这个问题的人.
提前致谢.
为什么我不能在Dunit Test projet中设置版本信息?该项目的复选框已禁用,但其他项目未禁用.看截图:

我正在比较DUnit中的一些货币值,但它在我的机器上根本不起作用(在其他机器上工作,但在我的机器上不工作).
一个例子:
CheckEquals(16.65, SomeCurrencyFieldValue);
Run Code Online (Sandbox Code Playgroud)
举:
expected: <16,65> but was: <16,65>
Run Code Online (Sandbox Code Playgroud)
如果做以下比较然后工作:
var
Temp: Currency;
begin
Temp := 16.65;
CheckEquals(Temp, SomeCurrencyFieldValue);
Run Code Online (Sandbox Code Playgroud)
问题是:当我将值直接传递给CheckEquals方法时,为什么比较不起作用?
我正在使用Hudson作为Delphi 2010项目的CI服务器.XMLTestRunner.pas单元将DUnit测试结果写入xml文件,该文件由hudson xUnit插件用于报告测试结果.xUnit插件显示失败但没有消息:
Stacktrace
MESSAGE:
+++++++++++++++++++
STACK TRACE:
Run Code Online (Sandbox Code Playgroud)
在"发布测试工具结果报告"的hudson项目配置中,我选择"NUnit-Version N/A(默认)"作为测试工具,因为列表中没有dunit选项,并且xml文件看起来类似于nunit格式:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<test-results total="123" notrun="0" date="20.12.2010" time="09:19:24">
<test-suite name="HelloWorldTestSuite" total="46" notrun="0">
<results>
<test-case name="TestCase.HelloWorldTest" execute="True" success="False" time="0,003" result="Failure">
<failure name="ETestFailure" location=""/>
<message>expected: < hello world! > but was: < hallo welt ></message>
</test-case>
...
Run Code Online (Sandbox Code Playgroud)
在哈德森配置中还有一个"自定义工具"选项,我必须指定"自定义样式表",但我不知道如何编写这样的样式表(是否有任何文档?).
在我的C++项目中,使用boost测试,可以很好地报告所有消息的失败情况.
鉴于单元测试的普及,以及将DUnit与Delphi一起使用,是否已经发布了任何已发布其源代码以及一系列单元测试的组件供应商?
我正在寻找与其他开发人员分享的示例.
我需要在我的Delphi应用程序中测试一些HTTP组件.我使用DUnit并希望在测试中添加一些自动化功能.
所以我的测试代码需要启动本地HTTP服务器,配置它(例如,在3秒内准备连接中断,或模拟低带宽,或要求登录/密码等),运行我的单元测试并关闭HTTP服务器.
是否有一些可用于Delphi/DUnit的HTTP服务器?
我知道Mozilla团队有这样的服务器,但是将它集成到DUnit中并不容易.
我在旧单元中有几个小功能Utils.pas.
现在我想重构一些,但我认为最好先编写测试.有了DUnit,我认为没有课程就不可能.
所以我想知道如何在重构之前测试它们?
编辑:
我认为这是不可能的,因为我试图使用测试用例向导在Delphi中添加测试用例.请看下面的图片,没有任何类和方法,所以我无法创建它.

我正在尝试使用DUnit对一个应用程序进行GUI单元测试,该应用程序的mainform动态地为自己创建帧.我已经能够在测试用例中创建应用程序到测试的mainform作为表单并访问其菜单项等.
当应用程序尝试动态创建框架时,问题就出现了.框架的资源读取到了需要窗口句柄的位置(在我的例子中,设置标签页的标题).它从TWinControl.GetHandle到TWinControl.CreateWnd和TCustomFrame.CreateParams.
在这个CreateParams中,代码说:
if Parent = nil then
Params.WndParent := Application.Handle;
Run Code Online (Sandbox Code Playgroud)
这就是差异发生的地方.当我运行实际的应用程序(不在测试中)时,Application.Handle返回一个非零数字,流程继续正常.但是在DUnit测试应用程序中,Application.Handle在这里返回0.这会导致TWinControl.CreateWnd中的代码引发异常,告知该帧没有父代:
with Params do
begin
if (WndParent = 0) and (Style and WS_CHILD <> 0) then
if (Owner <> nil) and (csReading in Owner.ComponentState) and
(Owner is TWinControl) then
WndParent := TWinControl(Owner).Handle
else
raise EInvalidOperation.CreateFmt(SParentRequired, [Name]);
Run Code Online (Sandbox Code Playgroud)
我想尝试解决这个问题(一般来说,所有测试问题)而不是仅仅因为测试而修改"生产"代码.您是否可以提供任何关于我是否可以某种方式强制将"应用程序"强加给其他东西,或以其他方式解决此问题的线索?
查看代码,一个可能的其他解决方案可能是尝试让所有者(我的应用程序测试的"MainForm",即我想要获得的句柄)在执行时处于csReading状态这个框架在测试中创建,但至少最初看起来并不是那么简单.
有在Delphi Observer模式很好的例子,由于#2明智的问题与解答,如 落实在Delphi观察者模式的最佳方式和是否有任何影片/屏幕投射或如何在Delphi使用接口其他资源?.从这些stackoverflow问题中,提取以下指导材料链接:
在第二个stackoverflow问题中,mghie描述dunit's DUnitWizard's XPObserver.pas为非常有趣,其他值得XP*.pas仔细研究.然而,该XPObserver单元被引用只在两个地方,在dunit\Contrib\DUnitWizard\Source\Common\dunit\XPObserverTests.pas那里测试的唯一的兴趣似乎是检查引用计数的,并且dunit\Contrib\DUnitWizard\Source\DelphiExperts\DUnitProject\XPTestedUnitUtils.pas只有在使用中XPObserver单元声明的IXPFamily类型.
因此,我想知道使用这个XPObserver装置的最佳做法是什么.
例如:设计问题,例如:
(1)如何使用XPObserver单元来实现做某事的观察者模式?
(2)如何使用XPObserver实现MVC模式?
或编码问题如:
(3)XPObserver的TXPSubjects被声称提供使能的能力single observer<->multiple subject的关系.但是,FSubjects被宣布为私人.也没有吸气剂.我想知道这是设计的吗?(例如,作者写// ...***DON'T*** refactor this method!!在TXPSubject.DeleteObserver.我这样不自信修改代码,因为我不明白这一点,也许其他部分完全).如果是的话,使用TXPSubjects使该咋办方式single observer<->multiple subject的关系?
非常感谢您的时间和意见!
我有一个凌乱的Delphi 7遗留系统来维护和开发.我已经在阅读"有效地使用遗留代码",我非常喜欢这本书.
为了开始遵循本书中的建议,我创建了一个测试项目,并尝试编写一个测试.为此,我需要在测试项目中添加一些单元,但这里存在问题:被测系统具有可怕的使用依赖性.一个单位使用其他单位,使用其他单位等等,等等.似乎大多数单位直接或间接使用一个特定单位,而这个单位在其使用条款中依次有170个依赖项.还存在间接循环依赖.
目前我正在尝试将所有遗留系统的单元添加到测试项目中,但我遇到了各种问题,例如"单元xxx是使用不同版本的xxx编译的"等等.
所以我想知道我做错了什么.我之前使用过单元测试,但在我自己的项目中,它更小,具有更好的结构和模块化.在这种情况下我有哪些选择?我错过了什么吗?