Проще говоря, у меня есть служба WCF, которая управляет яблоками. Помимо других функций, у него есть два способа добавления и удаления яблок из хранилища. Я пишу интеграционный тест, чтобы проверить, получает ли кто-то эту работу и надрезает яблоки. Raven DB в моей службе WCF выполняет роль аудита, она просто записывает действия и яблоки. В методах службы WCF есть и другая обработка: очистка, проверка, упаковка и т. Д.
Мой тест интеграции аудита может быть выражен как
- Пустое хранилище (режим RavenDB в памяти)
- Приходит Боб и кладет 10 яблок (открыть сессию, добавить, удалить сессию)
- Джейк приходит и берет 4 яблока (открыть сеанс, удалить, удалить сеанс)
- Проверьте, что осталось 6 яблок
Поскольку это два разных человека (два вызова WCF), имеет смысл использовать разные экземпляры сеанса. Тем не менее, с Raven DB я получаю
Исключение
Apple не связана с сеансом, не может удалить неизвестную сущность
Экземпляр
Если я сейчас запустил аналогичный интеграционный тест, когда два разных человека просто добавляют яблок в хранилище, общий объем хранилища соответствует истине. Это немного сбивает с толку: добавление работает через сеанс, удаление не работает. В этом посте Айенде говорит, что микроуправление сеансами - это не тот путь, но мне кажется естественным использовать разные сеансы в моем интеграционном тестировании. Надеюсь, аналогия с яблоками не оттолкнет вас.
Вопрос: Как использовать сеансы в интеграционном тестировании с RavenDB?
Пример кода (из блокнота)
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