F#: Come testare i moduli interni di un altro progetto?
Seguo le migliori pratiche F # dalla documentazione .Net :
- Creo un progetto per l'Applicazione (console, non libreria)
- Creo un progetto per i Test (con Expecto ma non importa)
Problema: alcuni dei miei moduli dell'applicazione non sono esposti tramite la internal
parola chiave. Pertanto non posso importare questi moduli nel mio progetto Tests.
=> Come posso eseguire unit test di questi moduli? Devo rimuovere il controllo di accesso interno?
Grazie!
Risposte
Per testare internal
, puoi usare InternalsVisibleTo
, per testare lezioni private, puoi collegare i file nel tuo progetto di test (quando sei nella finestra di dialogo "aggiungi file", puoi selezionare collegamento, invece di aprire).
Tuttavia, come è già stato commentato, generalmente testerai solo l'interfaccia pubblica. Ma occasionalmente vuoi testare separatamente anche interni complessi. Ad esempio nelle librerie di runtime .NET, questo viene spesso fatto (ci sono molti interni complessi) e usano molto l'approccio di collegamento.
Dato che private significa davvero privato per la classe e non sarai nemmeno in grado di accedere a tali membri da un metodo di estensione, dovresti inserire tali membri nella loro classe privata, come membri pubblici. In questo modo, quando effettui il collegamento, la classe è accessibile e anche i membri, ma nessuno dei due è accessibile nella versione di produzione.
Usa questa tecnica con parsimonia, perché legherà i tuoi dettagli privati al sistema di test e non sarai libero di modificare l'implementazione interna.