[英]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.