Ho cercato tanto a lungo su come progettare classi testabili in Swift, ma ogni sito di informazione descrive solo cose di base come come testare, come affermare, perché è un buon test ...
Il mio attuale design (che non sono così sicuro è il migliore) include una classe singleton ApiClient
che viene inizializzata su AppDelegate
. Qualcosa del genere:
// Inside AppDelegate#application:didFinishLaunchingWithOptions
ApiClientFactory.make();
// Inside ApiClientFactory
static func make() {
ApiClient.initialize(
userProvider: UserProvider(UserLocalRepo(), UserRemoteRepo()),
booksProvider: BooksProvider(BookLocalRepo(), BookRemoteRepo()),
...
)
}
L'idea era di iniettare nelle classi *Provider
s, falsi repository durante il test. Ma a causa del modo in cui VCs
è istanziata, non sono sicuro che questo sia un buon progetto, e non sono sicuro di dove iniettare quei finti repo, poiché sembra che AppDelegate#application:didFinishLaunchingWithOptions
sia ancora eseguito su test (il che significa ApiClient
verrà inizializzato con le classi effettive, non con quelle di simulazione)