标签: dunit

当我有一个新单位时,为什么'使用单位'会消失?

我使用DUnit框架为我的应用程序提供了一个单元测试项目.这个项目有一个单元,$IFDEF用于在xml文件而不是gui或just命令行中输出测试结果.通过切换Build配置启用XML_OUTPUT定义.

program DelphiCodeToDoc_Tests;

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
{$IFDEF XML_OUTPUT}
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas',
{$ENDIF}
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...
Run Code Online (Sandbox Code Playgroud)

这非常有效.当我从IDE(一个带有'File> New> Unit' 的新单元)向该项目添加一个新单元时,问题就出现了.

测试项目现在是:

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...
  MyNewUnit in 'IntegrationTests\MyNewUnit.pas';
Run Code Online (Sandbox Code Playgroud)

如您所见,测试XML_OUTPUT已消失...每次添加单元时,Delphi IDE都会删除此测试.

你知道我为什么以及如何避免它?

delphi dunit

4
推荐指数
4
解决办法
253
查看次数

如何通过编程方式禁用DUnit测试?

对于集成测试,我创建了一个DUnit测试套件,它为每个版本的第三方组件(消息代理)运行一次.不幸的是,由于某些版本的测试组件中存在已知错误,因此某些测试总是失败.

这意味着测试套件永远不会以100%完成.但是,对于自动化测试,需要100%的成功分数.DUnit没有提供现成的方法来按名称禁用测试套件中的测试.

delphi unit-testing dunit

3
推荐指数
1
解决办法
504
查看次数

Dunit控制台模式 - 执行测试两次

我有一个dunit测试项目,我试图在控制台模式下运行它.当我执行项目时,它运行两次(它只打开一个控制台窗口,我看到它执行了两次测试),并且执行时也比在GUI模式下运行时花费更多时间.有谁知道如何只运行一次dunit控制台测试?

DPR源代码:

var  
  R: TTestResult;  

begin  
  Application.Initialize;  
  if IsConsole then begin  
    with TextTestRunner.RunRegisteredTests(rxbHaltOnFailures) do begin  
      R := TextTestRunner.RunRegisteredTests;  
      ExitCode := R.ErrorCount + R.FailureCount;  
      Free;  
    end  
  end  
  else begin  
    GUITestRunner.RunRegisteredTests;  
  end;  
end.
Run Code Online (Sandbox Code Playgroud)

delphi dunit

3
推荐指数
1
解决办法
615
查看次数

如何在delphi单元测试中使用可视化组件?

正如在视觉应用程序中有时常见的那样,我有一些代码,其中数据在可视组件(TTreeView组件)中维护.我正在重构代码并为逻辑创建单元测试.

我的测试项目中唯一的可视化形式是GUITestRunner.将来我计划在持续集成服务器下将测试作为控制台应用程序运行,所以我没有任何形式.

当我尝试创建没有父级的TTreeView小部件并使用它时,我收到以下错误:

Control '' has no parent window
Run Code Online (Sandbox Code Playgroud)

在我的测试套件SetUp方法上创建小部件并在TearDown中销毁它的最佳方法是什么?是否可以在控制台应用程序中使用可视窗口小部件?我不需要显示它,甚至不需要处理事件.我只需要创建子节点并访问数据.

我设法让它与一个丑陋的黑客一起工作,但我想知道是否有一些标准的做法.

当然,在我阳光明媚和遥远的未来,我将重构这个2.1万行格式的代码,我的所有数据都将处于漂亮的数据结构中,并且这些测试不是必需的,但现在我需要它.

delphi unit-testing dunit delphi-7

2
推荐指数
1
解决办法
1227
查看次数

如何用DUnit模拟Spring4D事件

我正在努力用DUnit成功模拟一个Spring4d事件.

事实上,我更嘲笑一个模拟返回模拟事件...

这是基本结构.

TMyObject --EventContainer--> TMock<IEventContainer> --Event--> TMock<IEvent>
Run Code Online (Sandbox Code Playgroud)

TMyObject有一个属性EventContainer:IEventContainer

IEventContainer有一个属性Event:IMyEvent

我想嘲笑

MyObject.EventContainer.Event.Add
Run Code Online (Sandbox Code Playgroud)

我测试了我能想到的每种可能性.我得到AV或无效的演员.我把源代码放在下面.如果有人能帮助我让这个工作真的很漂亮!

program Project2;

{$APPTYPE CONSOLE}
{$R *.res}

uses
    System.SysUtils,
    DUnitTestRunner,
    Spring.Events,
    Spring,
    Classes,
    TestFramework,
    Delphi.Mocks;
    //Unit1 in 'Unit1.pas';

type

{$M+}
    IMyEvent = interface(IEvent<TNotifyEvent>)
        procedure Add(const handler: TMethod);
    end;
{$M-}
{$M+}

    IMyEventMock = interface(IMyEvent)
        procedure Add(const handler: TMethod);
    end;
{$M-}
{$M+}

    IEventContainer = interface(IInterface)
        function GetEvent: IMyEvent;
        procedure SetEvent(const Value: IMyEvent);
        property Event: IMyEvent
            read GetEvent
            write SetEvent;
    end;
{$M-}
{$M+}

    ITestEventContainer = interface(IEventContainer)
        function GetEvent: TMock<IMyEvent>;
        procedure SetEvent(const …
Run Code Online (Sandbox Code Playgroud)

delphi unit-testing dunit spring4d

2
推荐指数
1
解决办法
352
查看次数

德尔福单元测试:为CUT编写一个简单的间谍

我在寻找一种方式来轻松简洁地写为Delphi下DUnitX测试框架间谍.

在过去,我使用非常难看的方式:

[TestFixture]
Test = class(TObject)
public
  [test]
  procedure Test1;
end;

TMyClass = class(TObject)
protected
  procedure MyProcedure; virtual;
end;

TMyTestClass = class(TMyClass)
protected
  fMyProcedureCalled : Boolean;
  procedure MyProcedure; override;
end

procedure TMyTestClass.MyProcedure;
begin
   fMyProcedureCalled := true;
   inherited;
end;

procedure Test.Test1;
var aObj : TMyTestClass;
begin
   TMyTestClass.Create;
   Assert.IsTrue(aObj.fMyProcedureCalled);
end;
Run Code Online (Sandbox Code Playgroud)

所有这些代码都用于检查是否调用了一个过程.那太冗长了!

有没有办法写一个可以帮助我减少代码的间谍?

delphi unit-testing dunit spy dunitx

2
推荐指数
1
解决办法
265
查看次数

标签 统计

delphi ×6

dunit ×6

unit-testing ×4

delphi-7 ×1

dunitx ×1

spring4d ×1

spy ×1