Delphi模拟与DUnitX设置和TearDown

The*_*ear 6 delphi

我正在阅读Coding Delphi一书,并且在使用Delphi Mocks时遇到了麻烦.当我使用DUnitX的[Setup]属性创建模拟时,它似乎永远不会被创建.当我在测试中创建Mock时,它可以正常工作.我认为安装和TearDown的重点在于您不必为每个测试构建相同的项目.

以下是单元测试的代码

unit uDollarToGalleonsConverterTest;

interface

uses
  uDollarToGalleonsConverter,
  Spring.Services.Logging,
  Delphi.Mocks,
  DUnitX.TestFramework;


type

  [TestFixture]
  TDollarToGalleonConverterTest = class
  private
    Expected, Actual: Double;
    Converter: TDollarsToGalleonsConverter;
    Logger: ILogger;
    [Setup]
    procedure Setup;
    [TearDown]
    procedure TearDown;
  public
    [Test]
    procedure TestPointFiveCutsDollarsInHalf;
  end;


implementation

{ TDollarToGalleonConverterTest }

procedure TDollarToGalleonConverterTest.Setup;
begin
  Logger := TMock<ILogger>.Create;
  Converter := TDollarsToGalleonsConverter.Create(Logger);
end;

procedure TDollarToGalleonConverterTest.TearDown;
begin
  Converter.Free;
end;

procedure TDollarToGalleonConverterTest.TestPointFiveCutsDollarsInHalf;
begin
  Expected := 1.0;

  Actual := Converter.ConvertDollarsToGalleons(2, 0.5);

  Assert.AreEqual(Expected, Actual,
    'Converter failed to convert 2 dollars to 1 galleon');
end;

initialization
  TDUnitX.RegisterTestFixture(TDollarToGalleonConverterTest);

end.
Run Code Online (Sandbox Code Playgroud)

Ste*_*nke 5

默认情况下,为公共方法和已发布方法生成rtti方法.如果您有任何私有或受保护的方法,即使框架具有属性,框架也不会找到它们.

因此永远不会调用您的Setup方法.


500*_*ror 1

是的,书上的内容和现实似乎不符:

尝试将您的归因方法移至公共部分。