簡単に言えば、私はリンゴを管理するWCFサービスを持っています。他の機能とは別に、リンゴをストレージに追加したり削除したりする2つの方法があります。私は、誰かが仕事を利用して、リンゴを嫌うかどうかを確認するための統合テストを書いています。 WCFサービスのRaven DBには監査ロールがあり、アクションとリンゴだけを記録します。 WCFサービスの方法にいくつかの他の処理が存在する:クリーニング、検証、パッケージング等WCFと統合テスト用のRavenDbセッション管理
マイ監査統合テストは
- 空の記憶(RavenDBインメモリモード)
- ボブとして表現することができます来てます10リンゴ(オープンセッション、処分、追加セッション)
- ジェイクが来ると 6個のりんごが残っていることを
- チェック
これらは2人の異なる人(2つのWCF呼び出し)であるため、異なるセッションのインスタンスを使用することは理にかなっています。私は今、異なる2つの類似した統合テストを実行した場合しかし、アップルがセッションに関連付けられていない漆黒のDBと私は
例外
を取得し、 インスタンス
に未知のエンティティを削除することはできません人々はちょうどリンゴをストレージに追加すると、トータルストレージの内容は真実に対応します。これは混乱しているビットです:セッションを越えて作品を追加する、削除は動作しません。 In this post Ayendeは、セッションのマイクロ管理は方法ではないと言いますが、私の統合テストでは異なるセッションを使用するのは自然なことです。リンゴとの類推があなたを押しのけないと思う。
質問: RavenDBとの統合テストでセッションを使用するにはどうすればよいですか?
(メモ帳から)サンプルコードRavenDB、"The session manages change tracking for all of the entities that it has either loaded or stored"で
public void Remove(Apple apple)
{
using (var session = Store.OpenSession())
{
session.Delete(apple);
session.SaveChanges();
}
}
public void Add(Apple apple)
{
using (var session = Store.OpenSession())
{
session.Store(apple);
session.SaveChanges();
}
}
...
var apples = new apples[10];
//init
MyRavenDB.Add(apples);
MyRavenDB.Remove(apples.Take(4)); //throws here
//verify
コードを投稿できますか? –
コードストレージにアクセスできないが、これはセッションのクローズと追加と削除の統合テストで問題が発生しているはずだ。 – oleksii