Rhino Mocksのスタブとモックは、具象クラスではなく、インターフェースにのみ適しているというのは正しいですか?私はこのコードを機能させるためにかなりの時間を費やしました。スタブされたpubSubClientが常にクラスからSendメソッドを呼び出すとは思っていませんでした。そのメソッドにはいくつかの依存関係があり、例外をスローします。
[Test]
public void Test01()
{
PubSubMessage psm = new PubSubMessage();
var pubSubClient = MockRepository.GenerateStub<PubSubClient>();
pubSubClient.Stub(x => x.Send(psm)).IgnoreArguments().Return(null);
// actual PubSubClient Send method throws exception
// the rest of the test is skipped...
}
ただし、インターフェイスを抽出し、IPubSubClientで同じテストを実行すると、期待どおりに機能しているようです。
Rhinoでモック/スタブしたいすべてのクラスのインターフェースを抽出する必要があるということですか?または、技術的または概念的に何かが欠けていますか?
更新:わかりました。欠落している部分がわかったようです 。RhinoMocksは非仮想メソッドの呼び出しをインターセプトできません。したがって、インターフェイスを使用するか、具象クラスのすべてのメソッドを仮想化する必要があると思います。別のオプションがある場合は訂正してください。