A medida que desarrollo el código, a menudo quiero probar algunos de los componentes básicos de una clase, incluso si son normalmente privados. Si las pruebas de mi unidad están dentro del proyecto, puedo usar "Amigo" para lograr esto y aún así mantener las funciones privadas para el uso normal. Pero prefiero mover mis pruebas de NUnit a sus propios proyectos separados. ¿Cómo logro el efecto que estoy buscando?¿Cómo puedo probar las funciones privadas de un proyecto separado en VB .NET?
Respuesta
no se puede probar (fácilmente) privadas métodos de un proyecto diferente, pero es bastante común para probar métodos internos (Friend
en VB) de un proyecto de prueba usando InternalsVisibleToAttribute
. Esto hace que los miembros Friend
sean accesibles para otro ensamblaje.
Al parecer, esto era nuevo en VB 9 aunque estaba disponible en C# 2 ... no estoy seguro por qué, pero this blog post from Bart de Smet da un ejemplo rápido.
Tenga en cuenta que si su ensamblaje de producción está firmado, su ensamblaje de prueba también deberá estar firmado, y deberá especificar la clave pública en los argumentos InternalsVisibleToAttribute
. Vea this Stack Overflow answer para más detalles.
Puede usar Reflection para invocar los métodos privados. Hay muchas muestras para hacer esto.
Y esta es la que más me ha ayudado: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx – demoncodemonkey
De una rápida búsqueda en Google: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
Los fundamentos: (esto se pega desde el sitio del proyecto de código vinculado anteriormente)
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. EUnit no puede probar las funciones privadas
- 2. ¿Cómo probar las funciones en un directorio privado?
- 3. Prueba de funciones privadas en javascript
- 4. Funciones privadas en JavaScript
- 5. * Sutil * ¿Diferencias entre las funciones VB y las funciones Convert.To *?
- 6. funciones de plantillas privadas
- 7. ¿Cómo enviar un POST en .net vb?
- 8. Funciones estáticas privadas en javascript
- 9. C++: funciones virtuales privadas, frente a las funciones virtuales puras
- 10. ¿Las funciones "C" externas son un tipo separado?
- 11. ¿Cómo escribo auto propiedades privadas en VB 10?
- 12. VB .NET vs. VB 2010
- 13. Funciones privadas y variables ExtJs4?
- 14. ¿Cómo puedo extraer todas las clases en un archivo separado?
- 15. cómo probar un proyecto de software?
- 16. Funciones privadas abstractas
- 17. ¿Dónde debo poner funciones misceláneas en un proyecto .NET?
- 18. Funciones de VB a C#
- 19. Cómo probar un proyecto de biblioteca Android
- 20. ¿Cómo puedo envolver BOOST en un espacio de nombres separado?
- 21. ¿Cómo uso Github para crear un proyecto totalmente separado de un proyecto anterior?
- 22. ¿Cómo puedo probar las funciones de Perl que imprimen en la pantalla?
- 23. Anulación de las funciones virtuales públicas con funciones privadas en C++
- 24. vs. funciones estáticas privadas en C++
- 25. ¿Puedo usar todas las características de C# 4.0 en un proyecto dirigido a .Net 3.5?
- 26. Variables privadas en .net 4.0 tareas
- 27. ¿Cómo puedo mostrar las cifras por separado en matplotlib?
- 28. ¿Cuándo debo probar las vistas por separado en el flujo de trabajo de Cucumber & RSpec?
- 29. ¿Cómo puedo probar programáticamente las cookies?
- 30. ¿Cómo puedo probar los métodos en un objeto de método?
cuanto a por qué era nuevo en VB9, que era un costo/beneficio de intercambio. VB tiene una manera muy diferente de resolver nombres que C# e InternalsVisibleTo complica mucho la búsqueda de nombres. Era demasiado costoso para VB8 y por lo tanto cayó a VB9. De hecho, estamos realizando cambios adicionales en la resolución de nombres a (cont) – JaredPar
(cont) para esto en VB10. – JaredPar
gracias por esta respuesta –