2017-03-17 4 views
0

私のユニットテストでは、模擬したTList<T>をセットアップする必要があります。模倣したTList<T>.countプロパティの戻り値を設定するにはどうすればよいですか?TList <T>デルファイモックを使用したカウント戻り値

私はWhencountを使用すると、コンパイラのエラーメッセージは次のとおりです。

[dcc32 Error] Unit1.pas(40): E2014 Statement expected, but expression of type 'Integer' found 

私はgetCountを使用する場合When後のコンパイラエラーメッセージは次のとおりです。

[dcc32 Error] Unit1.pas(40): E2003 Undeclared identifier: 'getCount' 

countプロパティは直接fCount属性を読み込み、 。解決策はありますか?

type 
    TMyClass = class 
    end; 

procedure TXXXTestCase.testYYY; 
var 
    mL : TMock<TList<TMyClass>>; 
begin 
    mL := TMock<TList<TMyClass>>.create; 
    try 
    // ... 
    mL.Setup.WillReturn(1).When.Count; 
    // ... 
    finally 
    mL.Free; 
    end; 
end; 
+0

低レベルフッキングを使用しない限り、 'Count'値を疑似する唯一の方法は、ダミー値をリストに追加することです。 'When'に関しては、Mockは仮想ゲッターメソッドを使うプロパティの読み込みしか処理できないように見えます(メソッドをフックすることができます)。さらに、 'MyList.Count;'のようなステートメントは、とにかく(同じコンパイラエラー)Delphiでは無効です。 'Count'チェックをMock互換の別のクラス/メソッドでラップする必要があります。 –

+0

はい私のアイデアは同じです:getCount仮想メソッドで継承されたTListを使用するか、関数getListCount(aL_:TList )を作成してください:integer begin aL_.count;終わり;メソッドを呼び出します。それらのすべてがハッキングしています。テストできるようにコードをリファクタリングするだけです。しかし、正しい方向ではありません。 : –

+0

リストを嘲笑するのは悪い考えです。あなたがそれに含めることを望む値を入れてください。 –

答えて

0

OK。ステファン・グリンケのコメントに触発された私は、嘲笑されたオブジェクトの...のプロパティの特性にアクセスすることを避けるために、ユーティリティを作成しました。私はちょうど(擬似)値を取得するユーティリティクラスのモックに模擬を渡す。

コードsnipetは私のオリジナル1のようになります。

value = object1.property.list.count; 

深い表情内部このためのソリューション:

value = object1Utility.getListCount(object); 

TObjec1tUtilityは、その応答にObject2Utilityを呼び出しますが、この場合には、私はモックすることができますObject1Utility、モックをモックに追加する必要はありません。

関連する問題