63

戻り値を設定したい

_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(true);

ただし、特定のテストでは、その期待値をオーバーライドしてfalseを返します。

何かのようなもの:

_stubRepository.ClearExpectations();  //<- this does not exist, I'm just making something up
_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(false);

2回目の呼び出しで期待値がfalseを返さないようにしたいので、最初の期待値をオーバーライドしたいことに注意してください。

これは、私のテストシナリオを大幅に簡素化するのに役立ちます。

4

3 に答える 3

79

次の 3 つの方法があります。

BackToRecord を使用して期待をリセットできます

扱いにくいので、実際に使用したことがないことを認めなければなりません。

// clear expectations, an enum defines which
_stubRepository.BackToRecord(BackToRecordOptions.All);
// go to replay again.
_stubRepository.Replay();

編集:今では時々使用していますが、実際には最もクリーンな方法です。それを行う拡張メソッド(スタブなど)が必要です-忘れられたと思います。自分で書くことをお勧めします。

Repeat.Any() を使用できます

スタブ化された定義の順序を「壊し」、以前の定義を「オーバーライド」します。しかし、それはどういうわけか暗黙的です。書きやすいのでたまに使います。

_stubRepository.Stub(x => x.Contains(null))
  .IgnoreArguments()
  .Return(false)
  .Repeat.Any();

新しいモックを作成できます

些細なことですが、明確で理解しやすいです。多くの定義を保持し、呼び出しを 1 つだけ変更したい場合にのみ問題になります。

_stubRepository = MockRepository.GenerateMock<IRepository>();
_stubRepository.Stub(x => x.Contains(null))
  .IgnoreArguments()
  .Return(false);
于 2009-04-20T21:06:55.570 に答える
22

このような状況では、単純な RinoMocks 拡張メソッドを作成して、スタブの意図をより適切に示し、読みやすくしました。

public static void OverridePrevious<T>(this IMethodOptions<T> options)
{
    options.Repeat.Any();
}

したがって、コメントが必要な次のような不可解な呼び出しの代わりに:

[SetUp]
public void Setup()
{
    carStub.Stub(x => x.Model).Return("Model1");
    carStub.Stub(x => x.Model).Return("Model2");
}

[Test]
public void SomeTest()
{
    //Arrange
    //overrides previous stubs that were setup for the Model property
    carStub.Stub(x => x.Model).Return(null).Repeat.Any();

    //Act
    //Assert
}

.Repeat.Any() 呼び出しの意図をよりよく示す、より読みやすいテストを取得できます。

carStub.Stub(x => x.Model).Return(null).OverridePrevious();
于 2012-07-02T16:24:51.197 に答える