Pergunta

Quero agrupar um trecho de código que usa a API de representação do Windows em uma pequena classe auxiliar e, como sempre, estou procurando uma maneira de testar primeiro.No entanto, embora WindowsIdentity seja uma classe gerenciada, a chamada LogonUser necessária para realmente realizar o login como outro usuário é uma função não gerenciada em advapi32.dll.

Acho que posso contornar isso introduzindo uma interface para minha classe auxiliar usar e ocultando as chamadas P/Invoke em uma implementação, mas testar essa implementação ainda será um problema.E você pode imaginar que realizar a representação no teste pode ser um pouco problemático, visto que o usuário realmente precisaria existir no sistema.

Foi útil?

Solução

Diretriz:Não teste código que você não escreveu.
Você não deve se preocupar com o fato de a implementação do WinAPI não funcionar (provavelmente funciona conforme o esperado).Sua preocupação deve ser testar a 'Fiação', ou seja,se o seu código fizer a chamada correta do WinAPI.Nesse caso, tudo que você precisa é simular a interface e deixar a estrutura simulada informar se a chamada foi feita com os parâmetros corretos.Se sim, você terminou.

  • Crie IWinAPIFacade (com métodos WinAPI relevantes) e implemente CWinAPIFacade.
  • Escreva um teste que conecte uma simulação de IWinAPIFacade e verifique se a chamada apropriada foi feita
  • Escreva um teste para garantir que CWinAPIFacade seja criado e conectado como padrão (em funcionamento normal)
  • Implemente CWinAPIFacade que simplesmente delega cegamente para chamadas Platform Invoke - não há necessidade de testar automaticamente esta camada.Basta fazer uma verificação manual.Esperançosamente, isso não mudará com tanta frequência e nada quebrará.Se você achar que isso faz no futuro, bloqueie-o com alguns testes.

Outras dicas

Não tenho certeza se te sigo..Você não deseja testar o PInvoke sozinho (você não o escreveu), então deseja testar se a classe wrapper está funcionando conforme o esperado, certo?

Então, basta criar sua interface na classe wrapper e testar isso?

Em termos de necessidade de configurar usuários, etc., acho que isso seria uma bala que você precisa enfrentar.Pareceria estranho zombar de uma chamada PInvoke de wrapper, já que você simplesmente confirmaria e a interface existe :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top