1

Ich habe einen Schauspieler bekam, die etwa wie folgt aussieht:Wie Unit-Test ein Akteur, der einen Verweis auf einen anderen Akteur in seiner Methode erhält?

public class MyActor : Actor, IMyActor 
{ 
    public async Task<ICustomerActor> GetCustomer() 
    { 
     var customerId = await StateManager.TryGetStateAsync<ActorId>(CustomerIdState); 

     return customerId.HasValue 
      ? ActorProxy.Create<ICustomerActor>(customerId.Value) 
      : null; 
    } 
} 

Ich möchte wissen, ob es einen Weg gibt, diese Art von Interaktion zu testen. Wir verwenden die Bibliothek ServiceFabric.Mocks, um das Gerüst einzurichten, das benötigt wird, um Akteure außerhalb eines laufenden Dienstes zu erstellen, aber wenn es die ActorProxy.Create<ICustomerActor>(customerId.Value) Zeile erreicht, löst es eine Ausnahme aus, weil nichts wirklich wie ein echter Dienst zusammengebunden ist.

Antwort

2

Ein ActorProxyFactory in den aufrufenden Actor-Konstruktor einspeisen und damit ActoryProxy-Instanzen erstellen. Wie gezeigt here oder here.

Verwenden Sie dann eine Scheinbibliothek, um Pseudo-Proxy-Funktionen zu erstellen. Wie dieser: https://github.com/loekd/ServiceFabric.Mocks

+0

Ich dachte daran, aber hoffte auf eine bessere Lösung. :) Ich wünschte nur, es gäbe eine Möglichkeit, die normale 'ActorProxy.Create' Methode zu" reparieren ". – moswald

+0

Um klar zu sein, das ist kein schlechter Weg, es zu tun, aber die ganze Dokumentation sagt "um eine Akteurreferenz zu erhalten, rufen Sie' ActorProxy.Create' auf. Das würde das ändern und jetzt gibt es zwei Möglichkeiten, dasselbe zu tun. Ich ärgere mich immer, wenn Bibliotheksautoren nicht darüber nachdenken, wie sich ihre statischen und/oder Erweiterungsmethoden auf Anwendungsautoren auswirken, die Tests schreiben müssen. :/ – moswald

+0

Ich bevorzuge diesen Ansatz, aber es gibt auch Shims aus dem Rahmen von Fakes. – LoekD

Verwandte Themen