Mentre sviluppo codice, desidero spesso testare unitamente alcuni elementi costitutivi di una classe anche se sono normalmente privati. Se i miei test unitari sono all'interno del progetto, posso usare "Friend" per realizzare questo e mantenere comunque le funzioni private per l'uso normale. Ma preferirei spostare i miei test NUnit nei loro progetti separati. Come ottengo l'effetto che sto cercando?Come si esegue il test unitario delle funzioni private da un progetto separato in VB .NET?
risposta
Non si può (facilmente) prova privati metodi da un progetto diverso, ma è abbastanza comune per testare interne metodi (Friend
in VB) da un progetto di test utilizzando InternalsVisibleToAttribute
. Ciò rende i membri di Friend
accessibili a un altro assembly.
Apparentemente questo era nuovo in VB 9 anche se era disponibile in C# 2 ... non del tutto sicuro del perché, ma this blog post from Bart de Smet fornisce un rapido esempio.
Si noti che se l'assembly di produzione è firmato, sarà necessario firmare anche l'assembly di test e sarà necessario specificare la chiave pubblica negli argomenti InternalsVisibleToAttribute
. Vedi this Stack Overflow answer per maggiori dettagli.
È possibile utilizzare Reflection per richiamare i metodi privati. Ci sono un sacco di campioni là fuori per fare questo.
E questo è quello che mi ha aiutato di più: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx – demoncodemonkey
Da una rapida ricerca google: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
I principi fondamentali: (questo viene incollato dal sito del progetto di codice linkato sopra)
public static object RunStaticMethod(System.Type t, string strMethod,
object [] objParams)
{
BindingFlags eFlags =
BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
null, aobjParams, eFlags);
} //end of method
public static object RunInstanceMethod(System.Type t, string strMethod,
object objInstance, object [] aobjParams)
{
BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
objInstance, aobjParams, eFlags);
} //end of method
private static object RunMethod(System.Type t, string
strMethod, object objInstance, object [] aobjParams, BindingFlags eFlags)
{
MethodInfo m;
try
{
m = t.GetMethod(strMethod, eFlags);
if (m == null)
{
throw new ArgumentException("There is no method '" +
strMethod + "' for type '" + t.ToString() + "'.");
}
object objRet = m.Invoke(objInstance, aobjParams);
return objRet;
}
catch
{
throw;
}
} //end of method
- 1. Test delle funzioni private in javascript
- 2. Test unitario in VB 6 con SimplyVBUnit
- 3. Come si esegue il debug di un test unitario in Xcode 3?
- 4. Come si crea un test unitario per un progetto RC/.NET Core di Visual Studio 2015?
- 5. Funzioni private di test unità in Android
- 6. È possibile scrivere un assembly di test unitario in C# per eseguire il test su un assembly scritto in VB?
- 7. MVC .NET Come aggiungere un progetto di test unitario per il codice sorgente esistente?
- 8. Opzioni JVM in Android quando si esegue il test gradlew
- 9. Python: come si esegue il test unitario di una funzione annidata?
- 10. Test unitario - Come procedere?
- 11. Come si esegue il test dell'unità sui formati in Django?
- 12. Jasmine in un progetto di prova separato
- 13. Test delle unità Clojure al volo in un frame separato
- 14. Funzioni private in JavaScript
- 15. Come si esegue il test dell'unità su un controller ASP.NET Core o su un oggetto modello?
- 16. Come si crea un assieme di test unitario per una libreria di classi portatile .NET?
- 17. Wrong CurrentCulture quando si esegue un test nUnit in TeamCity
- 18. Come si salta un test unitario in Django?
- 19. Test unitario Sito Web ASP.net Codice progetto memorizzato in App_Code
- 20. Come si effettua un test unitario per testare un metodo che controlla le intestazioni delle richieste?
- 21. Come si esegue il test dell'unità per EXC_BAD_ACCESS?
- 22. Test unitario ... come migliorarlo
- 23. Come si esegue il debug delle macro?
- 24. Come si scrive un test unitario per una funzione che non viene esportata?
- 25. Dove metti il tuo test unitario?
- 26. Come si inserisce un servizio angular2 in un test unitario? (RC3)
- 27. Test unitario in Ember.js
- 28. Come test unitario Router route
- 29. Come ottenere il percorso del progetto dal progetto di test?
- 30. Le funzioni di test unitario con effetti collaterali?
Quanto al perché era nuovo in VB9, era un costo/vantaggioso commercio. VB ha un modo molto diverso di risolvere i nomi che C# e InternalsVisibleTo complica molto la ricerca dei nomi. Era troppo costoso per VB8 e quindi è sceso a VB9. In realtà stiamo apportando ulteriori modifiche alla risoluzione dei nomi con (cont) – JaredPar
(cont) conto per questo in VB10. – JaredPar
grazie per questa risposta –