3

Rhino モックを使用してプロジェクトのテスト ケースをセットアップし始めたところです。.Return(objToReturn:list)は正確に何をしますか?

リストを初期化して入力し、それをモックスタブメソッドに渡す場合にのみ機能するようです。私は、Mock Stub メソッドを使用してリストにデータを入力し、そのデータを入力したリストを返すことができると想定していました。

....
    private ProductRepository _productRepository;
    private IProductRepository _productRepositoryStub;

    [SetUp]
    public void SetUp()
    {
        _productRepository = new ProductRepository();


        //Testing using Rhino Mocks
        //Generate stub
         _productRepositoryStub = MockRepository.GenerateMock<IProductRepository>();
    }

    [Test]
    public void Canquerydb()
    {
        IList list = _productRepository.GetAllProducts();
        _productRepository.Stub(x=> x.GetAllProducts()).Return(list);
        _productRepositoryStub.AssertWasCalled(x => x.GetAllProducts());
    }


    /// <summary>
    /// Refaactor and use MockRhino here
    /// </summary>
    [Test]
    public void can_insert_product()
    {
        IProduct product = new Grains("Cheese Bread", "Dairy grain", 0);
        _productRepository.SaveProduct(product);
        _productRepositoryStub.Stub(x=>x.SaveProduct(product));
        _productRepositoryStub.AssertWasCalled(x => x.SaveProduct(product));

    }
4

1 に答える 1

4

質問のタイトルに答えるには: Rhino モックは、モックとスタブを区別します。モックは、テスト対象のシステム (テスト対象のシステム (SUT)) のラップされたインスタンスであるため、テストを失敗させる可能性がある唯一のものです。モック化されたオブジェクトの依存関係を満たすことができるように、Rhino モックで何かを「スタブ」します。スタブを使用すると、渡した引数を可視化し、返される結果を制御できるため、モックの動作について完全に分離してアサーションを行うことができます。

このサイトには、モックとスタブの詳細な説明があります。

さらに、Moqのようなライブラリは、モックとスタブを区別しません。ジェネリックを使用することで、SUT をモックする必要がなくなります。私は個人的に Moq のこのシンプルさを好みます。

于 2013-01-28T23:01:20.363 に答える