2

私はRhino.Mocksがどのように機能するかを研究しており、クラスPropertyに手動で値を設定する方法を理解しようとしています。

私はインターネットで、メソッドを使用する代わりに、Expect.Call()の引数としてプロパティのみを必要とするサンプルを見ました。

MockRepository mocks = new MockRepository(); 
Person p = mocks.StrictMock<Person>();
Expect.Call(p.FirstName).Return("John");

人は次のようなクラスです:

public class Person
{
   public string FirstName {get;set;}
}

私は常にエラーを受け取ります:

無効な呼び出し、最後の呼び出しが使用されたか、呼び出しが行われていません(仮想(C#)/オーバーライド可能(VB)メソッドを呼び出していることを確認してください)。

私は何かが足りないのですか?クラスプロパティを手動で設定し、それらを評価して、ゲッターとセッターが正常に機能しているかどうかを確認することはできますか?

4

1 に答える 1

8

他のモックフレームワークと同様に、Rhino Mocksは、仮想メソッドとプロパティを定義するインターフェイスまたはクラスのみをモックできます。

これは、クラスを実装するときに、Rhinoが指定したクラスから派生クラスを作成し、すべてのvirtual(またはOverridableVBの)メソッドをインターセプターを使用して呼び出しを処理するスタブ実装に置き換えるためです。

非仮想メソッドを指定すると、Rhinoはラッパーを作成できません。

sealedこれは(NonInheritableVBの)クラスにも当てはまります。

したがって、クラスが機能するには、プロパティを次のように実装する必要があります。

public class Person
{
    public virtual string FirstName { get; set; }
}

このようにして、Rhinoはそれに応じてpopertyをオーバーライドできます。

于 2011-03-27T09:04:59.800 に答える