2008-09-10 5 views
5

Quiero envolver un trozo de código que usa la API de suplantación de Windows en una pequeña clase de ayuda, y como de costumbre, estoy buscando una forma de probar primero. Sin embargo, mientras 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.¿Es posible probar la unidad de una clase que realiza llamadas P/Invoke?

Creo que puedo solucionar esto introduciendo una interfaz para que mi clase de ayudante use y oculte las llamadas P/Invoke en una implementación, pero probar esa implementación seguirá siendo un problema. Y puede imaginarse 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.

Respuesta

10

Directriz: No pruebe el código que no ha escrito.
No debería preocuparse porque 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 ese caso, todo lo que necesita es burlarse de la interfaz y dejar que el marco simulado indique si la llamada se realizó con los parámetros correctos. Si es así, has terminado.

  • Cree IWinAPIFacade (con métodos relevantes de WinAPI) y la implementación CWinAPIFacade.
  • escribir una prueba que se enchufa en un simulacro de IWinAPIFacade y verificar que se realiza la llamada apropiada
  • escribir una prueba para asegurarse de que se crea CWinAPIFacade y enchufado como un defecto (en funcionamiento normal)
  • Implementar CWinAPIFacade cuales simplemente delega a ciegas en las llamadas de Invocación de plataforma, no es necesario probar automáticamente esta capa. Solo haz una verificación manual. Esperemos que esto no cambie tan a menudo y nada se rompa. Si encuentra que hace en el futuro, haga una barricada con algunas pruebas.
+0

Este es el enfoque que tomé, y estoy bastante contento con él. Sin embargo, todavía me gustaría poder verificar que mi clase concreta está "haciendo lo correcto" cuando llama a la api de Win32. :) – Rytmis

+1

Hay. Se llama prueba de integración. – nathanchere

+0

@nathanchere - + 1ed. Solo asegúrese de que esté cubierto como parte de alguna prueba de nivel del sistema (manual/aceptación). Así que incluso el caso límite 'CWinAPIFacade está roto' se detecta temprano (automatizado es, por supuesto, ideal). – Gishu

0

No estoy seguro de si te sigo .. No quieres probar el PInvoke tú mismo (no lo escribiste) por lo que quieres probar que la clase contenedora está funcionando como se esperaba ¿no?

Entonces, solo crea tu interfaz en la clase contenedora y prueba en contra de eso?

En cuanto a la necesidad de configurar usuarios, etc., creo que sería una bala que debes morder. Parecería extraño burlarse de una llamada de PInvoke, ya que simplemente confirmaría y la interfaz existe :)

+0

¡Gishu me ganó! : D –

+0

Sorryyyyyyy (tuve que hacer 10 caracteres para comentar ... ¡Uy, lo hice) :) – Gishu

Cuestiones relacionadas