Question

Je veux enrouler un morceau de code qui utilise l'emprunt d'identité Windows API dans une jolie petite classe d'aide, et comme d'habitude, je suis à la recherche d'un moyen d'aller tester en premier.Cependant, alors que WindowsIdentity est une classe gérée, la LogonUser appel qui est nécessaire pour effectuer l'enregistrement en tant qu'un autre utilisateur est une fonction non managée dans advapi32.dll.

Je pense que je peux contourner ce problème en introduisant une interface pour ma classe d'aide à l'utilisation et de cacher le P/Invoke appelle à une mise en œuvre, mais les tests que la mise en œuvre sera toujours un problème.Et vous pouvez imaginer l'effectuer réellement l'emprunt d'identité dans le test peut être un peu problématique, étant donné que l'utilisateur aurait réellement besoin d'exister sur le système.

Était-ce utile?

La solution

Ligne directrice:Ne pas tester le code que vous n'avez pas écrit.
Vous ne devriez pas être concerné par la WinAPI mise en œuvre ne fonctionne pas (ou plus probablement, il fonctionne comme prévu).Votre préoccupation devrait être de tester le "Câblage" c'est à diresi votre code fait le droit WinAPI appel.Dans ce cas, tous vous avez besoin est de se moquer de l'interface et de laisser la maquette cadre de savoir si l'appel a été fait avec les bons paramètres.Si oui, vous avez terminé.

  • Créer IWinAPIFacade (avec les WinAPI méthodes) et la mise en œuvre CWinAPIFacade.
  • Écrire un test qui se branche dans un simulacre de IWinAPIFacade et de vérifier que l'appel est fait
  • Écrire un test pour s'assurer que CWinAPIFacade est créé et connecté en tant que par défaut (en fonctionnement normal)
  • Mettre en œuvre CWinAPIFacade qui, tout simplement, à l'aveugle délégués à l'appel de Plate-forme d'appels - pas besoin d'auto-test de cette couche.Il suffit de faire une vérification manuelle.Nous espérons que cela ne change pas souvent et rien ne casse.Si vous trouvez que c' n' dans l'avenir, barricade avec certains tests.

Autres conseils

Je ne suis pas sûr si je vous suis..Vous ne voulez pas tester la PInvoke vous-même (vous n'avez pas l'écrire) si vous voulez tester que la classe wrapper fonctionne comme prévu droit?

Donc, il suffit de créer votre interface dans la classe wrapper et test contre qui?

En termes de besoin de définir des utilisateurs, etc, je pense que ce serait une balle vous avez besoin de mordre.Il semble étrange de se moquer d'un wrapper PInvoke appel, puisque il vous suffit simplement de confirmer et d'interface existe :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top