2016-04-05 34 views
2

Başlıktan anlaşılacağı gibi, bir yöntemin bir sürümünün çağrıldığını ve aşırı yüklenmiş sürümün olmadığını doğrulamak için bir sınama yazmaya çalışıyorum. Delphi-Mocks parametre eşleştirmesinde indekslemeyi kullandığı için, bir başarısızlık görüyorum ve aslında aşırı yüklendiğinde fonksiyonun çağrıldığını görüyorum.Delphi Mocks - Aşırı yüklenmiş bir yöntemin hiçbir zaman hiçbir zaman çağrılmadığını doğrulayın

Örnek Test Arayüzü

TFoo = class(TObject) 
public 
    function Bar(const a, b, c: string) : string; overload;virtual; 
    function Bar(const a: string) : string; overload;virtual; 
end; 

Örnek Test Kod

procedure TestClass.Test 
var mock : TMock<TFoo>; 
    bar : TBar; 
begin 
    mock := TMock<TFoo>.Create; 
    bar := TBar.Create(mock); 
    mock.Setup.Expect.Once.When.Bar('1','2','3'); 
    mock.Setup.Expect.Never.When.Bar(It(0).IsAny<string>());   

    //Will Wind up down an if-branch calling either bar(1) or bar(3) 
    bar.Execute; 

    mock.VerifyAll;   
end; 

teşekkürler!

cevap

1

Bunu kontrol etmek için "WillExecute" öğesini kullanabilirsiniz. Örneğin: Bahar Mocks içinde

procedure TestClass.Test 
var 
    mock : TMock<TFoo>; 
    bar : TBar; 
    CheckPassed: Boolean; 
begin 
    mock := TMock<TFoo>.Create; 
    bar := TBar.Create(mock); 

    CheckPassed := True; 
    mock.Setup.WillExecute('Bar', 
    function(const Args: TArray<TValue>; const ReturnType: TRttiType): TValue 
    begin 
     if Length(Args) = 2 then // one is for "Self" 
     CheckPassed := False; 
    end); 

    //Will Wind up down an if-branch calling either bar(1) or bar(3) 
    bar.Execute; 

    Assert(CheckPassed); 
end; 
+0

Kullandığım çözüm budur. Tam olarak eksik olduğum parça buydu. – mwilkinson

2

FWIW (yaklaşan 1.2 sürüm kapsamında) aynı test şu şekilde görünecektir:

procedure TestClass.Test; 
var 
    mock: Mock<TFoo>; 
    bar: TBar; 
begin 
    foo := TBar.Create(mock); 

    bar.Execute; 

    mock.Received(1).Bar('1', '2', '3'); 
    mock.Received(0).Bar(Arg.IsAny<string>); 
end; 

Eğer konsept biraz farklı fark gibi. Sahte davranış dinamikiyle çalışıyorsanız (bu varsayılan değerdir) alamaya yapılan her çağrıya izin verilir ve işlevler için varsayılan değeri döndürür (boş dize, 0 veya nil gibi). Daha sonra, beklenen zamanlar denilen yöntemlerin kontrol edilip edilmediğini kontrol etmek için Received'ı kullanabilirsiniz.

İlgili konular