Sembra che ci siano molte risorse su come simulare il codice di terze parti quando quel codice è semplice. A JSONRequest
, ecc. Ma quando si utilizza una libreria di terze parti che richiede la configurazione di un grafo di oggetti relativamente complesso, ad esempio tre o più classi, le risorse sembrano esaurirsi.
Ad esempio, supponi che ti sia stata data un'interfaccia repository, IRepository
, e ora hai il compito di testare e implementare un repository concreto usando Acme Inc nuovo AcmeBase , quindi inizi a lavorare creando la tua nuova AcmeRepository
class.
L'ORM di AcmeBase richiede la configurazione di un grafo di oggetti relativamente complesso per poterlo utilizzare. Gli oggetti nel grafico - benché organizzati bene - sono tutti abbastanza strettamente accoppiati:
C'è il Context
, il FetchRequest
, il Store
, il StoreCoordinator
, poi ci sono tutti gli oggetti AcmeRecord
proprietari che, ovviamente, non sono oggetti dati puri. Potresti rompere il problema in più parti. Dì, avvolgi le classi Context
, FetchRequest
e AcmeRecord
, ma come fai a prendere in giro un'operazione come execute(request: FetchRequest) -> Set<AcmeRecord>
sulla nostra classe Context
? Tutto ciò che l'isolamento sembrerebbe ostacolare il design della struttura, creare molto più lavoro e aumentare ironicamente l'area di superficie per i bug.
Come fai a testare questo tipo di coordinamento complesso se non possiedi le classi di terze parti?
Sembra che creare un wrapper per la classe ogni che costituisce il grafico sia eccessivo. Ma come puoi verificare che il grafico sia stato istanziato ed è gestito come ti aspetti?