Delphi 10.3.3 Delphi .Mocks
У меня проблемы с настройкой теста, чтобы определить, был ли вызван метод в Mock на основе условия. В качестве простого примера здесь. Я хочу знать, вызывается ли MyObject.PlaceOrder, когда вызывается MyProjectObject.CheckOutOurStock и запас пуст. CheckOutOurStock вызывает MyObject.PlaceOrder, если IsStockEmpty имеет значение true. Я хочу, чтобы тест не прошел, если я закомментирую вызов MyObject.PlaceOrder.
Настройка макета с помощью Expect (MockMyObject.Setup.Expect.Once.when.PlaceOrder;), конечно, не работает из-за аргумента when. Отключение когда и только MockMyObject.Setup.Expect.Once также не работает.
Я хотел бы просто установить флаг LPlaceOrderWasCalled: Boolean и Assert против этого.
Я подозреваю, что Я после находится в настройке WillExecute, но я не знаю, как это сделать. Я включил подпись метода, закомментированную в тесте. Простая процедура будет работать, но это не то, что ожидает WillExecute. Я нашел только примеры, которые показывают подпись без конкретных примеров.
Любая помощь будет оценена
unit MyObject;
interface
type
TMyObject = class
public
procedure PlaceOrder;
end;
implementation
{ TMyObject }
procedure TMyObject.PlaceOrder;
begin
// Place an order
end;
end.
unit MyProjectObject;
interface
uses
MyObject;
type
TMyProjectObject = class
private
FMyObject: TMyObject;
FIsStockEmpty: Boolean;
public
procedure CheckOutOurStock;
property MyObject: TMyObject read FMyObject write FMyObject;
property IsStockEmpty: Boolean read FIsStockEmpty write FIsStockEmpty;
end;
implementation
{ TMyProjectObject }
procedure TMyProjectObject.CheckOutOurStock;
begin
if IsStockEmpty then
// MyObject.PlaceOrder;
end;
end
Тест:
procedure
TMyProjectObjectTest.CheckOutOurStock_WhenIsStockEmptyIsTrue_PlacesOrder;
var
MockMyObject : TMock<TMyObject>;
LPlaceOrderWasCalled : Boolean;
begin
//Arrange
LPlaceOrderWasCalled := False;
MockMyObject := TMock<TMyObject>.Create;
MockMyObject.Setup.Expect.Once.when.PlaceOrder;
MockMyObject.Setup.WillExecute(
function(const args: TArray<TValue>; const ReturnType: TRttiType)
begin
LPlaceOrderWasCalled := True;
Result := '';
end).when.PlaceOrder;
Cut.MyObject := MockMyObject;
CUT.IsStockEmpty := True;
//Act
CUT.CheckOutOurStock;
//Assert
Assert.WillNotRaise(
procedure
begin
MockMyObject.Verify();
end, EMockVerificationException);
Assert.IsTrue(LPlaceOrderWasCalled);
// TExecuteFunc = reference to function (const args : TArray<TValue>; const ReturnType : TRttiType) : TValue;
end;
.