Pregunta

Quiero incluir un fragmento de código que utiliza la API de suplantación de Windows en una pequeña clase auxiliar y, como siempre, estoy buscando una manera de realizar la prueba primero.Sin embargo, si bien WindowsIdentity es una clase administrada, la llamada LogonUser que se requiere para realizar el inicio de sesión como otro usuario es una función no administrada en advapi32.dll.

Creo que puedo solucionar esto introduciendo una interfaz para que la use mi clase auxiliar y ocultando las llamadas P/Invoke en una implementación, pero probar esa implementación seguirá siendo un problema.Y se puede imaginar que realizar la suplantación en la prueba puede ser un poco problemático, dado que el usuario realmente necesitaría existir en el sistema.

¿Fue útil?

Solución

Guía:No pruebes código que no hayas escrito.
No debería preocuparse de que la implementación de WinAPI no funcione (lo más probable es que funcione como se esperaba).Su preocupación debería ser probar el 'Cableado', es decir.si su código realiza la llamada WinAPI correcta.En cuyo caso, todo lo que necesita es simular la interfaz y dejar que el marco simulado le indique si la llamada se realizó con los parámetros correctos.Si es así, ya está.

  • Cree IWinAPIFacade (con métodos WinAPI relevantes) e implemente CWinAPIFacade.
  • Escriba una prueba que conecte una simulación de IWinAPIFacade y verifique que se realice la llamada adecuada.
  • Escriba una prueba para garantizar que CWinAPIFacade se cree y conecte de forma predeterminada (en funcionamiento normal)
  • Implemente CWinAPIFacade, que simplemente delega de forma ciega a las llamadas de Platform Invoke; no es necesario realizar una prueba automática de esta capa.Simplemente haz una verificación manual.Esperemos que esto no cambie tan a menudo y que nada se rompa.Si encuentras que hace en el futuro, barricarlo con algunas pruebas.

Otros consejos

No estoy seguro si te sigo..No desea probar PInvoke usted mismo (no lo escribió), por lo que desea probar que la clase contenedora funciona como se esperaba, ¿verdad?

Entonces, ¿simplemente crear su interfaz en la clase contenedora y probarla?

En términos de la necesidad de configurar usuarios, etc., creo que sería una bala que deberías morder.Parecería extraño burlarse de una llamada contenedora PInvoke, ya que simplemente confirmaría que la interfaz existe :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top