0

私は PEX と Moles が初めてで、以下のような Moles を使用して UnitTest を行う方法を知りたいと思っています。

テストするには UniDynArray が必要です。ただし、UniDynArray の作成は UniSession に依存し、UniSession は UniObjects.OpenConnection に依存します。このコードを実行すると、ThirdParty dll からセッションが開いていないというエラーが表示されます

助けてください

[TestMethod, HostType("Moles")]
    public void Constructor2WithMoles()
    {
        using (MolesContext.Create())
        {
            //Should I make the Third party session like this ???
            MUniSession msession = new MUniSession();

            //Here What Actually Happens in the code is uniObject opensession return session
            // UniSession session = UniObjects.OpenSession(a,b,c,d); How should i do this
           //???? MUniObjects.OpenSessionStringStringStringString = (a, b, c, d) => msession;

            MUniDynArray mdata = new MUniDynArray();

            mdata.InsertInt32Int32String = (column, index, strValue) =>
                                               {
                                                   column = 1;
                                                   index = 1;
                                                   strValue = "Personal Auto";
                                               };

            mdata.InsertInt32Int32String = (column, index, strValue) =>
                                               {
                                                   column = 2;
                                                   index = 1;
                                                   strValue = "1.1";
                                               };

            mdata.InsertInt32Int32String = (column, index, strValue) =>
            {
                column = 3;
                index = 1;
                strValue = "05/05/2005";
            };

            mdata.InsertInt32Int32String = (column, index, strValue) =>
            {
                column = 4;
                index = 1;
                strValue = "Some Description";
            };

            mdata.InsertInt32Int32String = (column, index, strValue) =>
            {
                column = 5;
                index = 1;
                strValue = "20";
            };

            mdata.InsertInt32Int32String = (column, index, strValue) =>
            {
                column = 6;
                index = 1;
                strValue = "1";
            };

            History target = new History(mdata, 1);

            Assert.AreEqual<string>("Some Description", target.Description);
        }
        // TODO: CREATE Mole asserts
    }
4

1 に答える 1

0

まず、 .NET 4.5 および Visual Studio 2012 (2012 年 9 月 12 日リリース) でFakes StubおよびShim型を使用するのを待つことを強くお勧めします。Fakes は Moles の製品版です。Fakes の使用を開始するには、VS2012 Release Candidate の無料の Ultimate バージョンをダウンロードしてください。

あなたの質問に答えるには、依存性注入設計パターンを使用して、サードパーティの依存関係を分離する必要があります。Shim/Mole 型の多くのユーザーは、依存性注入パターンの実装を見落としています。他のオプションが残っていない場合にのみ、Shim/Mole 型を使用してください。サードパーティのライブラリがインターフェイスを公開していると思います。Fakes/Moles は、インターフェイスをテストに使用できる Stub 型に自動的に変換します。プロダクション コードで使用するには、インターフェイスから具体的なスタブを作成する必要があります。これらのスタブは、対象のサードパーティ ライブラリ タイプの単なるラッパーです。パターンの実装方法の詳細については、依存性注入に関する記事を参照してください。このパターンは、特にResharperリファクタリング!プロ

スタブ型のメソッド呼び出しは、Shim/Mole 型と同じラムダ/デリゲート構文を使用して迂回されます。スタブ タイプは、1 つまたは少数のテストに固有のスタブを生成するのに適しています。それ以外の場合は、複数のテストで使用するための具体的なテスト スタブを作成するのが最適なオプションです。

于 2012-08-09T18:45:54.607 に答える