2009-03-04 7 views
2

特定のオブジェクトのプロパティがfalseに設定されている場合にのみ呼び出されるメソッドがあります。これは初期値です。最初の呼び出しの後、プロパティはtrueに設定され、呼び出しは一度だけ行われます。RhinoMocksのExpect.Callでobjectのプロパティ値を設定することはできますか?

しかし、私がこの変更を行うクラスをモックすると、モックオブジェクトは基底オブジェクトのプロパティを変更しません。

オブジェクトにプロパティの変更を強制する方法は、期待通りの応答ですか?線に沿って

何か...

Expect.Call(mockedObject.TestMethod(underlyingObject)).NowDoThis(delegate() { underlyingObject.Processed = true; }); 

答えて

3

はい、ではなく、あなたのNowDoThisの

()を実行してみてくださいを呼び出す()

最後にホーム

ので、私は試してみることができますいくつかのコード。

トリックはSystem.Delegateからderrivesアクションを入力するために、匿名デリゲートをキャストすることである(タイプMethodInvokerも動作するはずですが、そのタイプはのSystem.Windows.Formsでのみ利用可能です)

ここではコードです。私はrhino mocksのAAA構文がより快適です。 Expect.Call構文に変換する必要があるかどうかを教えてください。私も、ただの手段を[ファクト] xunit.netを使用しています[テスト]

public interface Thingie 
{ 
    bool Flag { get; set; } 
    void DoSomething(); 
} 

[Fact] 
public void Test() 
{ 
    var thingie = MockRepository.GenerateStub<Thingie>(); 

    thingie.Stub(x => x.DoSomething()).Do((Action) delegate { thingie.Flag = true; }); 

    Assert.False(thingie.Flag); 

    thingie.DoSomething(); 

    Assert.True(thingie.Flag); 
} 
+0

Hmmと呼ばれています。私がすると、「匿名メソッドを代理人型ではないため、System.Delegateを型に変換できません」というエラーが表示されます。 – BlackWasp

0

mockedObjectが、実際には、モックオブジェクトであると仮定すると、試験方法が持っている後、あなたは、単にあなたの財産の戻り値を設定することができます

bool isProcessed = false; 
Expect.Call(mockedObject.TestMethod(underlyingObject)) 
    .Do(new Action(() => isProcessed = true)); 

SetupResult.For(mockedObject.Processed).Return(isProcessed); 
関連する問題