ja spotkałem tę samą sytuację pisząc kilka testów jednostkowych. Rozwiązanie dostarczone przez Jamesa zadziałało; jednakże skutkowało to jedną ścieżką kodową dla testu jednostkowego i inną ścieżką dla kodu produkcyjnego, która pokonała cel testu jednostkowego. Udało nam się utworzyć drugi magazyn dokumentów i połączyć go z pierwszym magazynem dokumentów, co pozwoliło nam pomyślnie uzyskać dostęp do metod autoryzacji rozszerzeń. Chociaż to rozwiązanie prawdopodobnie nie byłoby dobre dla kodu produkcyjnego (ponieważ tworzenie magazynów dokumentów jest drogie), to działa dobrze dla testów jednostkowych. Oto przykładowy kod:
using (var documentStore = new EmbeddableDocumentStore
{ RunInMemory = true,
UseEmbeddedHttpServer = true,
Configuration = {Port = EmbeddedModePort} })
{
documentStore.Initialize();
var url = documentStore.Configuration.ServerUrl;
using (var docStoreHttp = new DocumentStore {Url = url})
{
docStoreHttp.Initialize();
using (var session = docStoreHttp.OpenSession())
{
// now you can run code like:
// session.GetAuthorizationFor(),
// session.SetAuthorizationFor(),
// session.Advanced.IsOperationAllowedOnDocument(),
// etc...
}
}
}
Istnieje kilka innych elementów, które należy wymienić:
- Pierwszy sklep dokument musi być prowadzony z UseEmbeddedHttpServer ustawiony na true, tak aby druga puszka Uzyskać dostęp do niego.
- Stworzyłem stałą dla portu, aby była używana konsekwentnie i zapewniać użycie niezarezerwowanego portu.