6

メッセージをテーブルに書き込むためにクラスで使用している DataContext をどのようにモール化できますか。LINQ が書き込んでいるテーブルには、予想されるメッセージ数があると断言したいと思います。これが私がこれまでに持っているものです。

var context = new MJustTestingDataContext();
MyMessagewriter writer = new MyMessageWriter(context);

var messageList = new List<MIncmoingMessage>();
MTable<MIncomingMessage> messageTable = new MTable<MIncomingMessage>();
messageTable.Bind(messagesLinqList.AsQueryable());

テスト対象のクラスで xUnit を使用してこのコードを使用すると、この例外が発生します

Microsoft.Moles.Framework.Moles.MoleNotImplementedException: DataContext.Dispose() was not moled.

ここで欠けているものと、ほくろに DataContext.Dispose() を実装する方法は? 私は、Pex なしでモルをスタンドアロンで使用しています。

4

2 に答える 2

3

新しいMoleを作成するとき、そのメソッドとプロパティのデフォルトの動作は、MoleNotImplementedException呼び出されるたびにをスローすることです。

molを実装するには、moledインスタンスでメソッドが呼び出されてcontext.Dispose = () => {};も何も起こらないことを意味します。DisposeDispose質問を読み直しましたが、は基本クラスで定義されている ため、おそらく問題が発生しています。モルベース法を行うには、次のことを行う必要があります。

var context = new MJustTestingDataContext();
var baseContext = new MDataContext(context);

baseContext.Dispose = () => {};

テスト対象のコードによって呼び出されるすべてのプロパティ/メソッドを実装する必要があります。または、メソッドを使用して、molインスタンスのデフォルトの動作をグローバルに設定できますBehaveAsDefaultValue。このように、mol内のすべてのメソッドは何もせず、.をスローする代わりに、戻り型が存在する場合はその戻り型のデフォルト値を返しますMoleNotImplementedException。ただし、この動作が必要な場合は、ほくろよりもスタブを使用することをお勧めします。

于 2010-09-10T14:53:32.157 に答える
0

あなたのテストが何をしているのか理解できません。昨日、似たようなことをしなければならなかったので、私の経験を共有します。まず、コードをテストするためにすべての MoleTypes を使用する必要はないことを理解することが重要です。コードの特定の部分をラムダ式にリダイレクトするために Moles を使用する必要があるだけです。これを行うメソッドを考えると:

  1. データベースから変更するユーザーのリストを取得する
  2. セット内のすべてのユーザーを変更する
  3. 新しいセットをデータベースに送り返す

データベースを使用しないように 1 と 3 をリダイレクトしたいと思います。たとえば、次のSubmitChangesコードを使用して呼び出しを (3)にリダイレクトできます。

bool hitSubmitChanges = false;
int changeCount = 0;
IList<object> updates = null;

// more code here... 

   // redirect DataContext.SubmitChanges() to a lambda to catch updates 
   MDataContext.AllInstances.SubmitChanges = (c) =>
   {
    changeCount = c.GetChangeSet().Updates.Count;
    updates = c.GetChangeSet().Updates;
    hitSubmitChanges = true;
   };

それ (およびユーザーを取得するための呼び出し) は、私がテストで使用する唯一の Moletypes です。あとは普通でしょう。次に、アサーションを使用して、changeCount、updates、および hitSubmitChanges の値を確認できます。

于 2010-12-08T16:47:42.943 に答える