簡體   English   中英

Delphi模擬與DUnitX設置和TearDown

[英]Delphi Mocks with DUnitX Setup and TearDown

我正在閱讀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.

默認情況下,為公共方法和已發布方法生成rtti方法。 如果您有任何私有或受保護的方法,即使框架具有屬性,框架也不會找到它們。

因此永遠不會調用您的Setup方法。

是的,書與現實之間似乎存在不匹配:

嘗試將您的屬性方法移動到公共部分。

我知道這是一個老帖子,但仍然值得回答。

問題是TMock是一個記錄,你沒有變量來保存它。 將Logger更改為TMock,它應該可以正常工作。

編輯:忘記提及,TMock有一個隱式運算符,它將實現ILogger,因此您仍然可以使用需要ILogger的Logger。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM