Cómo desviar el método "no público" en lunares de clase pública
-
25-10-2019 - |
Pregunta
Tengo un método público que utiliza un método privado local para obtener datos de la DB.
private string SomeMethod(string)
{
...
Doing some operations
...
string data = GetDBData(string);
Doing some operations
...
}
Quiero desviar/aislar el método privado getDbData (cadena) usando moles para que mi prueba no requiera el DB.
Obviamente, mi pregunta es: ¿cómo hacerlo? Gracias uria
EDITAR
Información Adicional:
Traté de cambiar los accesorios de método a público e internos protegidos, en ambos casos ahora puedo ver los métodos como moles. Pero al ejecutar la prueba, el método original todavía se está utilizando y no el desvío que he implementado en el PEXMethod.
Solución 2
me lo imaginé
Si tengo el público myclass con somemetod privado
public class MyClass
{
private string SomeMethod(string str){}
}
Si desea moldear el método SomEMethod, debe usar AllInstancias en el método de prueba:
[PexMethod]
SomeMethod(string str)
{
MMyClass.AllInstances.SomeMethod = (instance, str) => { return "A return string"; };
}
- Observe que la Lambda recibe un parámetro de instancia como el primer parámetro. No estoy seguro de cuál es su función.
Otros consejos
Puede probar cualquiera de los siguientes.
Hacer el método interno y agregue un atributo como este al ensamblaje:
[assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]
Cambiar el acceso al método a virtual protegido y luego usa un stub.
- Refactore su clase para que obtenga una interfaz (IdataAccessObject) como parámetro de constructor, siendo suethod uno de los métodos de esa interfaz, y luego pasar un trozo de esa interfaz a su clase en métodos de prueba.