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.

¿Fue útil?

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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top