1

簡単な要件がありますが、苦労しているようです。

私は:を含むstubをモックするを作成しました:interfaceProperty

public interface IMockIRuleRuningViewModel : IRuleRunningViewModel
{
    int Id { get; set; }
}

そして、それmockは:

var mock = MockRepository.GenerateStub<IMockIRuleRuningViewModel>();

mock、私はこれのためにセッターに入れたであろう行動をしたいと思いますProperty、そしてここに私の試みがあります:

mock.Stub(x => x.Id).WhenCalled(
    o =>
        {
            var engine = new RulesEngine(mock);
            mock.ProcessRuleEngineResults(engine.RunRule("Id"));
        });

しかし、私はこれを取得し続けますException

PropertyBehaviorを使用するように定義されたプロパティに期待値を設定しようとしています。このようなコードを書く代わりに:mockObject.Stub(x => x.SomeProperty).Return(42); プロパティを直接使用して、同じ結果を得ることができます。mockObject.SomeProperty = 42;

4

2 に答える 2

3

以下は私のために働きます:

HttpResponseBase response = MockRepository.GenerateMock<HttpResponseBase>();

// stub the getter
response.Stub(r => r.StatusCode).Return((int)HttpStatusCode.OK);

// Stub the setter
response.Stub(r => r.StatusCode = Arg<int>.Is.Anything).WhenCalled( o =>
  {
    Console.WriteLine("called");
  });

私が実際にやろうとしているのは、ステータスコードを取得できるが設定できない場合をモデル化することなので(ヘッダーはすでに送信されているため)、私はしませんWhenCalled()。これを行います。

 response.Stub(r => r.StatusCode = Arg<int>.Is.Anything)
   .Throw(new HttpException("Server cannot set status after HTTP headers have been sent"));

使用する必要はMockRepository.GenerateMockありませんMockRepository.GenerateStub。どうしてか分かりません。

于 2012-11-29T12:56:23.950 に答える
2

SUT(テスト対象システム)の動作を検証する場合は、適切な期待値を持つモックを使用して、それを検証する必要があります。特定の方法で動作する必要があるかもしれない値を渡すだけで、このテストの焦点では​​ない場合は、スタブを使用します(スタブによってテストが失敗することはありません)。

私はあなたがこのテストでテストしていると仮定しますRulesEngine(それは私が見る実際のオブジェクトだけだからです)。「Id」ルールが実行されたときのエンジンの動作を検証するサンプルテストを次に示します。

// Arrange
var model = MockRepository.GenerateMock<IMockIRuleRuningViewModel>();
model.Expect(m => m.ProcessEngineResults(42));
RulesEngine engine = new RulesEngine(model);

// Act
engine.RunRule("Id");

// Assert
model.VerifyAllExpectations();
于 2012-05-22T09:06:20.190 に答える